HDU4940

来源:互联网 发布:vivo手机怎么备份数据 编辑:程序博客网 时间:2024/06/10 09:23
//看了思路,还没有看代码,说是什么最小割,无源无汇可行流//输入u,v,d,b,d我,d+b敌,s到t,都要看方向,x为d和,y为d+b和,要找x>y,首先t集合只有一个元素,//因为如果有两个,跑走一个则y变小,注意s和t互为补集 ,大水题,有推理的思路就行了 ,重在思考 #include<iostream>#include<cstring>#define ll __int64using namespace std;struct node{ll wo;ll di;}map[205][205];//开得稍微大一点,不然会RE,加上10左右吧 int n,m;bool solve(){for(int i=1;i<=n;i++)//把x尽可能的找进去,让x尽可能大     {   ll sset=0;ll tset=0;       for(int j=1;j<=n;j++)   {         sset+=map[j][i].wo;tset+=map[i][j].di;       }    //cout<<sset<<" "<<tset<<endl;   if(sset>tset)   return false;        }    return true;}int main(){int CAS;scanf("%d",&CAS);for(int kcas=1;kcas<=CAS;kcas++){for(int i=1;i<=202;i++)for(int j=1;j<=202;j++){map[i][j].wo=0;map[i][j].di=0;} scanf("%d%d",&n,&m);int u,v;ll d,b;for(int i=1;i<=m;i++){scanf("%d%d%I64d%I64d",&u,&v,&d,&b);map[u][v].wo=d;map[u][v].di=d+b;}if(solve())printf("Case #%d: happy\n",kcas);elseprintf("Case #%d: unhappy\n",kcas);} return 0;} 

0 0
原创粉丝点击