hdu 4292 拆點 最大流)

2021-09-08 09:29:31 字數 1340 閱讀 1007

思路:為了控制乙個人只連一瓶飲料,乙份食物,那麼我們可以把乙個人拆成兩個,他們之間連一條權值為1的邊,另外左邊連它喜歡的食物,權值為1,右邊連它喜歡的飲料,權值為1,在起點連食物的時候加流量限制,終點加流量限制,跑一遍最大流即可。

1 #include2 #include3 #include4

using

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 最大流 拆點

題意就是每個人都有喜歡的飲料和食物,但是這些飲料和食物有限,問你如何選才能使最多的人喝到自己喜歡的飲料和食物。這題主要就是想清楚如何建邊,然後跑乙個最大流就好了 分別建立 源點指向飲料的邊 飲料指向人的邊 人指向自己的邊 保證每個人只被走一次 人指向食物的邊,食物指向匯點的邊。這裡要把人的點拆成兩個...