nyoj 哭泣天使 最大流
来源:互联网 发布:iphone是否允许网络 编辑:程序博客网 时间:2024/06/05 09:26
要考试了,可是不想复习怎么办?
是各种事情要做,但是自己总有各种理由不想做然后不去做。看来一件事情如果不想做的话那个都是理由啊!
今天又是用了这样那样的理由使得自己一天没有去上自习而在宿舍待着,什么时候能够真的去控制自己才算长大了吧!今天是儿童节,看了还是没有长大,祝大家儿童节快乐吧!
废话有有点说的多了,进入正题。
题意就不用说了,是典型的最大流问题,如果流和天使微笑的数量相同就是不确定,不同则是Terrible
直接贴的模板。虽然自己写的模板真的是太长了,而且别人既有可能是看不懂的 啊!
下面的是代码:
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>#include<map>using namespace std;#define rep(i,n) for(int i=0; i<n; i++)#define repf(i,n,m) for(int i=(n); i<=(m); ++i)#define repd(i,n,m) for(int i=(n); i>=(m); --i)#define max(a,b) (a)>(b)?(a):(b)#define min(a,b) (a)<(b)?(a):(b)#define fab(a) ((a)>0?(a):(0-(a)))#define ll long long#define arc(a) ((a)*(a))#define inf 10000000#define exp 0.000001#define N 1000int n,m,l,len,s,t;struct node{int x,y,e,pre;}a[200000];int pre[N+10];int que[10000];int stage[N+10];void addpage(int i,int j,int e){ a[len].x=i; a[len].y=j; a[len].e=e; a[len].pre=pre[i]; pre[i]=len++;}bool bfs(int s,int t){queue<int>q;memset(stage,-1,sizeof(stage));stage[s]=0; q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=pre[x]; i!=-1; i=a[i].pre)if(a[i].e>0 && stage[a[i].y]==-1){stage[a[i].y]=stage[a[i].x]+1;q.push(a[i].y);if(a[i].y==t) return true;}}return false;}int dfs(int s,int t){ int sum=0; while(bfs(s,t)) { int tail=0,u=s,i; while(true) { if(u==t) { int tmp=inf,mark; rep(i,tail) if(a[que[i]].e<tmp) { mark=i; tmp=a[que[i]].e; } rep(i,tail) { a[que[i]].e-=tmp; a[que[i]^1].e+=tmp; } sum+=tmp; tail=mark; u=a[que[tail]].x; } for(i=pre[u]; i!=-1; i=a[i].pre) { int y=a[i].y; if(stage[y]==-1) continue; if(stage[y]==stage[u]+1 && a[i].e>0) break; } if(i!=-1) { que[tail++]=i; u=a[i].y; } else { if(tail==0) break; stage[u]=-1; u=a[que[--tail]].x; } } } return sum;}int main(){ int test,x,sum,pp;scanf("%d",&test);int s,t;while(test--){scanf("%d%d",&n,&m);s=0; t=m+n+1;len=0;sum=0;pp=0;memset(pre,-1,sizeof(pre));repf(i,1,n){scanf("%d",&x); addpage(s,i,x);addpage(i,s,0);sum+=x;}repf(i,n+1,n+m){scanf("%d",&x); addpage(i,t,x); addpage(t,i,0),pp+=x;}if(pp!=sum){printf("Terrible\n"); continue;}repf(i,1,n)repf(j,n+1,n+m){addpage(i,j,1); addpage(j,i,0);}int tmp=dfs(s,t);//cout<<tmp<<endl; // cout<<sum<<endl;if(tmp==sum)printf("Not Sure\n");elseprintf("Terrible\n");} return 0;}
- nyoj 哭泣天使 最大流
- NYOJ 489-哭泣天使:最大流
- NYOJ 489 哭泣天使 最大流
- nyoj 489 哭泣天使 网络流 最大流 IASP
- NYOJ 489 哭泣天使(网络流)
- nyoj 489 哭泣天使
- NYOJ489哭泣的天使(最大流)
- (NYoj 489)哭泣天使 -- 网络最大流,关于网格的建图方法,Dinic
- 《网络流学习笔记04 && NYOJ 489 哭泣天使(建边,超级源点和汇点)》
- NYOJ489哭泣天使(网络流)
- nyoj489哭泣的天使
- 哭泣
- 哭泣
- 哭泣
- NYOJ 326&&poj381【dinic求最大流】
- NYOJ 489 最大流 Dinic 算法
- 天使
- 天使
- I NEED A OFFER!(DP)
- ZJUTACM(简单模拟)
- ASIHttpRequest stop request method
- OpenCV图像处理车牌检测与定位应用
- How to Type(DP)
- nyoj 哭泣天使 最大流
- Maximum Depth of Binary Tree
- Coins(多重背包)
- 冒泡排序
- HTML字体样式
- LA4728 Squares
- 图解U-Boot:第一阶段源码分析
- Jquery 选择器总结
- vi/vim复制粘贴命令