有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了,超時的概率太大了。後來找了解題報告,知道了縮點這一說,因...