bzoj1532 [POI2005]Kos-Dicing

网友投稿 713 2022-10-05

bzoj1532 [POI2005]Kos-Dicing

bzoj1532 [POI2005]Kos-Dicing

(​​ Description Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出玩得最好的人.现在有一个非常不走运的家伙,他想成为那个玩的最好的人,他现在知道了所有比赛的安排,他想知道,在最好的情况下,他最少只需要赢几场就可以赢得冠军,即他想知道比赛以后赢的最多的那个家伙最少会赢多少场. Input 第一行两个整数n 和 m, 1 <= n <= 10 000, 0 <= m <= 10 000; n 表示一共有多少个参赛者, m 表示有多少场比赛. 选手从1 到 n编号. 接下来m 行每行两个整数表示该场比赛的两个选手,两个选手可能比赛多场. Output 第一行表示赢得最多的人最少会赢多少场 Sample Input 4 4 1 2 1 3 1 4 1 2 Sample Output 1 二分答案 看这个答案能否满足把每次二分的答案给 从源向每个人建的边的边权上 然后每个人向 他参加的那个赛事建容量为1的边 然后每个赛事向汇建容量为1的边 那么我每次贰分一下 看能否跑满就行 这个意思就在于我认为每个人最多赢这么多比赛 然后看怎么分配一下把所有的比赛都站上 使得每场比赛有一个人赢

include

include

include

include

define N 22000

define inf 0x3f3f3f3f

using namespace std; inline char gc(){ static char now[1<<16],*S,*T; if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S ) return EOF;} return *S++; } inline int read(){ int x=0;char ch=gc(); while(ch<’0’||ch>’9’) ch=gc(); while(ch<=’9’&&ch>=’0’){x=x*10+ch-‘0’;ch=gc();} return x; } struct node{ int x,y,z,next; }data[N*20]; int num=1,h[N],level[N],T,st,n,m; inline void insert1(int x,int y,int z){ data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num;data[num].x=x; data[++num].y=x;data[num].z=0;data[num].next=h[y];h[y]=num;data[num].x=y; } inline bool bfs(){ queueq;memset(level,0,sizeof(level));level[0]=1;q.push(0); while(!q.empty()){ int x=q.front();q.pop(); for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (level[y]||!z) continue;level[y]=level[x]+1;q.push(y);if (y==T) return 1; } }return 0; } inline int dfs(int x,int s){ if (x==T) return s;int ss=s; for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (level[x]+1==level[y]&&z){ int xx=dfs(y,min(s,z));if (!xx) level[y]=0; s-=xx;data[i].z-=xx;data[i^1].z+=xx;if (!s) return ss; } }return ss-s; } inline bool check(int mid){ for (int i=2;i

#include#include#include#include#define N 22000#define inf 0x3f3f3f3fusing namespace std;inline char gc(){ static char now[1<<16],*S,*T; if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S ) return EOF;} return *S++;}inline int read(){ int x=0;char ch=gc(); while(ch<'0'||ch>'9') ch=gc(); while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=gc();} return x;}struct node{ int x,y,z,next;}data[N*20];int num=1,h[N],level[N],T,st,n,m,a[N],b[N],ans[N];inline void insert1(int x,int y,int z){ data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num;data[num].x=x; data[++num].y=x;data[num].z=0;data[num].next=h[y];h[y]=num;data[num].x=y;}inline bool bfs(){ queueq;memset(level,0,sizeof(level));level[0]=1;q.push(0); while(!q.empty()){ int x=q.front();q.pop(); for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (level[y]||!z) continue;level[y]=level[x]+1;q.push(y);if (y==T) return 1; } }return 0;} inline int dfs(int x,int s){ if (x==T) return s;int ss=s; for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (level[x]+1==level[y]&&z){ int xx=dfs(y,min(s,z));if (!xx) level[y]=0; s-=xx;data[i].z-=xx;data[i^1].z+=xx;if (!s) return ss; } }return ss-s;}inline bool check(int mid){ for (int i=2;i=1) { if (y==a[i-n]) if (data[j^1].z==0) {ans[i-n]=1;break; }else {ans[i-n]=0;break;} } } }}int main(){ freopen("3425.in","r",stdin); n=read();m=read();T=n+m+1; for (int i=1;i<=m;++i){ int x=read(),y=read();a[i]=x;b[i]=y; insert1(x,n+i,1);insert1(y,n+i,1);insert1(n+i,T,1); }st=num+1; for (int i=1;i<=n;++i) insert1(0,i,0);// for (int i=2;i<=num;++i) printf("%d %d %d\n",data[i].x,data[i].y,data[i].z); int l=0,r=m; while(l<=r){ int mid=l+r>>1; if (check(mid)) { r=mid-1;getans(); }else l=mid+1; }printf("%d\n",l); //for (int i=2;i<=num;++i) printf("%d %d %d\n",data[i].x,data[i].y,data[i].z); for (int i=1;i<=m;++i) printf("%d\n",ans[i]); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序无法获取到unionId怎么办(微信unionid获取失败)
下一篇:URAL 1143 Electric Path
相关文章

 发表评论

暂时没有评论,来抢沙发吧~