题目大意

求混合图是否存在欧拉回路

做法

有向边我们只有增加入度出度

对于无向边,我们给它设定一个初始方向

如果不能满足|入度-出度|为偶数,无解

然后在网络流图中,

设设定方向的反向连一条边,表示反悔流量

对于最后in>out的点,最多可以提供反悔(in-out)/2点反悔流量,从源点连向它

对于out>in的点,至少接受(out-in)/2点反悔流量,连向汇点

跑一次网络流判断是否满流

由于图中一条边提供一个入度,一个出度

所以图中总入度是等于总出度的

网络流中两边流量是一样的

注意

sb我还要错多少次

网络流连边的数组还要考虑到连源点汇点的边

数组开大一点会死咩

分析

#include <cstdio>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
const int M=207;
const int S=0;
const int T=201;
const int INF=1e9; inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
} int tcas;
int n,m;
int in[M];
int ot[M];
int g[M],te;
struct edge{int y,f,next;}e[2407]; void addedge(int x,int y,int f){
e[++te].y=y;e[te].f=f;e[te].next=g[x];g[x]=te;
e[++te].y=x;e[te].f=0;e[te].next=g[y];g[y]=te;
} int q[M],tq;
int lev[M]; bool bfs(){
int h=0,t=1,x,p,y;
memset(lev,-1,sizeof(lev));
q[1]=S; lev[S]=0;
while(h^t){
int x=q[++h];
for(p=g[x];p;p=e[p].next)
if(e[p].f&&lev[y=e[p].y]==-1){
lev[y]=lev[x]+1;
if(y==T) return 1;
q[++t]=y;
}
}
return 0;
} int dfs(int x,int fl){
if(x==T) return fl;
int p,y;
int tp,res=0;
for(p=g[x];p;p=e[p].next)
if(e[p].f&&lev[x]+1==lev[y=e[p].y]){
tp=dfs(y,min(fl,e[p].f));
if(tp){
e[p].f-=tp;
e[p^1].f+=tp;
res+=tp;
fl-=tp;
if(fl==0) return res;
}
}
if(res==0) lev[x]=-1;
return res;
} int main(){
int i,x,y,z,res;
tcas=rd();
while(tcas--){
n=rd();
m=rd();
memset(in,0,sizeof(in));
memset(ot,0,sizeof(ot));
memset(g,0,sizeof(g)); te=1;
for(i=1;i<=m;i++){
x=rd(),y=rd(),z=rd();
ot[x]++;
in[y]++;
if(z==0) addedge(y,x,1);
} z=0;
for(i=1;i<=n;i++)
if((in[i]-ot[i])%2==1) {z=1;break;} if(z) puts("impossible");
else{
res=0;
for(i=1;i<=n;i++){
z=abs(in[i]-ot[i])/2;
if(!z) continue;
if(in[i]>ot[i]) addedge(S,i,z);
else addedge(i,T,z),res+=z;
}
while(bfs()) res-=dfs(S,INF);
if(res>0) puts("impossible");
else puts("possible");
}
}
return 0;
}

最新文章

  1. +Load和+initialize方法解析
  2. gdb 调试出现 ImportError: No module named &#39;libstdcxx&#39;
  3. ceph实践: 搭建环境
  4. mysql语句优化认识
  5. 如何查看tensorflow版本与存储位置
  6. 我的Android最佳实践之—— ImageView中图片拉伸显示
  7. (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
  8. iOS 去除导航栏下的黑线
  9. 【POJ2114】Boatherds 树分而治之
  10. 百度ueditor 上传图片后如何设置样式
  11. openrisc 之 Wishbone总线学习笔记——总线互联
  12. UVA 10494-If We Were a Child Again(一流的塔尔苏斯)
  13. NYOJ 23.取石子(一)
  14. .Net Core下通过Proxy 模式 使用 WCF
  15. VMVare的窗口自适应
  16. mysqlGTID主从配置
  17. Paper | 多任务学习的鼻祖
  18. mysql数据表的基本操作
  19. SpringBoot编写自定义配置信息
  20. 网站申请HTTPS 访问

热门文章

  1. GIMP如何制作一只大佬猫头像
  2. Voyager的安装及配置文件
  3. Python分布式爬虫开发搜索引擎 Scrapy实战视频教程
  4. Python学习笔记:open函数和with临时运行环境(文件操作)
  5. Docker工具
  6. pandas修改列名
  7. 安装liteIDE on mac
  8. noip2017行记
  9. 洛谷P1085不高兴的津津
  10. ogre3D程序实例解析1-平移旋转与缩放