最大流 縮點 HDU 3605 Escape

2021-08-22 12:08:51 字數 816 閱讀 5548

有n個人,m個星球。每個人都對不同的星球有自己的喜好,每個星球都有自己的容量。問能否讓所有的人都呆在自己喜歡的星球裡。

(1 <= n <= 100000), m (1 <= m <= 10)

以為是套模板的題,一直tle,mle。看了大佬的**才明白這題需要縮點。因為最多有10個星球,所以最多有

#include#include#include#include#includeusing namespace std;

const int n=3e5+7;

const int inf=1<<26;

struct edge

}edge[10*n];

int n,m,edn,sp,tp;

int p[n],d[n],c[n];

void add(int u,int v,int w)

bool bfs()}}

return ~d[tp];

}int dfs(int u,int b)

}if(!r)d[u]=-2;

return r;

}int dinic()

return total;

}int num[2000],cap[20];

int main()

num[tmp]++;

}for(int i=0;i<=(1<}}

}for(int i=1;i<=m;i++)

if(dinic()==n) printf("yes\n");

else printf("no\n");

}return 0;

}

HDU 3605 Escape (最大流 縮點)

題意 給你n個人,m個星球,每個人對這m個星球的都有一定的適應能力,每個星球都有一定的容納量,問能否讓所有的人在星球上生存。剛開始做的時候一直tle 不知道為什麼,改著改著發現建圖的時候,添了很多邊,這樣跑最大流非常慢,看了網上的思路才知道要縮點,因為星球最多才有10個,所以把每個星球適合住的人數存...

HDU3605 Escape (最大流 縮點)

2012如果這是世界末日怎麼辦?我不知道怎麼做。但現在科學家們發現,有些恆星可以生存,但有些人卻不適合生活在一些星球上。現在科學家們需要你的幫助,就是確定所有的人都能在這些星球上生活。輸入多組測試資料,每個資料的開頭是n 1 n 10萬 m 1 m 10 n表示地球上有n個人,m代表m星球,行星和人...

HDU 3605 Escape(最大流 縮點轉換)

題目很簡單,要求的就是最後能搬到星球上去的人的個數。剛開始看到,知道是最大流,就把人和星球都設為點,能生存就連線,權值為1,最後建立超級源點和超級匯點。求出最大流量即可。先是re,開大陣列後tle。仔細算了,光光人到星球的便就可達到100w了,超時的概率太大了。後來找了解題報告,知道了縮點這一說,因...