思路:為了控制乙個人只連一瓶飲料,乙份食物,那麼我們可以把乙個人拆成兩個,他們之間連一條權值為1的邊,另外左邊連它喜歡的食物,權值為1,右邊連它喜歡的飲料,權值為1,在起點連食物的時候加流量限制,終點加流量限制,跑一遍最大流即可。
1 #include2 #include3 #include4using
namespace
std;
5#define maxn 1111
6#define maxm 88888888
7struct
edgeedge[maxm];
1011
inthead[maxn];
12int
pre[maxn];
13int
cur[maxn];
14int
level[maxn];
15int
gap[maxn];
16int
ne,nv,vs,vt,n,f,d;
17int
food[maxn];
18int
drink[maxn];
1920
21void insert(int u,int v,int cap,int cc=0)28
2930
31int sap(int vs,int
vt)52 aug=-1;53
}54goto
loop;55}
56}57int minlevel=nv;
58for(int i=head[u];i!=-1;i=edge[i].next)64}
65 gap[level[u]]--;
66if(gap[level[u]]==0)break
;67 level[u]=minlevel+1
;68 gap[level[u]]++;
69 u=pre[u];70}
71return
maxflow;72}
7374
intmain()
83for(int i=1;i<=d;i++)
87for(int i=1;i<=n;i++)
90for(int i=1;i<=n;i++)96}
97}98for(int i=1;i<=n;i++)
104}
105}
106 printf("
%d\n
",sap(vs,vt));
107}
108return0;
109 }
hdu 4292 拆點 最大流)
思路 為了控制乙個人只連一瓶飲料,乙份食物,那麼我們可以把乙個人拆成兩個,他們之間連一條權值為1的邊,另外左邊連它喜歡的食物,權值為1,右邊連它喜歡的飲料,權值為1,在起點連食物的時候加流量限制,終點加流量限制,跑一遍最大流即可。1 include2 include3 include4 using ...
hdu 4292 最大流 水題
很裸的一道最大流 格式懶得排了,注意把人拆成兩份,乙份連線食物,乙份連線飲料 4 3 3 4個人,3種食物,3種飲料 1 1 1 食物每種分別為1 1 1 1 飲料每種數目分別為1 yyn 第乙個人對第1,2,3種食物的態度為接受,接受和拒絕 nyyyny ynyyny 第乙個人對第1,2,3種飲料...
HDU 4292Food 最大流 拆點
題意就是每個人都有喜歡的飲料和食物,但是這些飲料和食物有限,問你如何選才能使最多的人喝到自己喜歡的飲料和食物。這題主要就是想清楚如何建邊,然後跑乙個最大流就好了 分別建立 源點指向飲料的邊 飲料指向人的邊 人指向自己的邊 保證每個人只被走一次 人指向食物的邊,食物指向匯點的邊。這裡要把人的點拆成兩個...