題意:給你n個人,m個星球,每個人對這m個星球的都有一定的適應能力,每個星球都有一定的容納量,問能否讓所有的人在星球上生存。
剛開始做的時候一直tle 不知道為什麼,改著改著發現建圖的時候,添了很多邊,這樣跑最大流非常慢,看了網上的思路才知道要縮點,因為星球最多才有10個,所以把每個星球適合住的人數存一下,當做源點與星球的邊的流量,星球的最大容納量當做星球與匯點的邊的流量。
跑一遍dinic,最大流大於等於n即yes
否則no
#include #include #include #include #include #include using namespace std;
const int inf = 0x3f3f3f3f;
const int max = (1ll << 31) - 1;
struct edge edges[1100];
int cur[2001], head[2000], edge_num = -1;
int n, m, s, t;
void addedge2(int from, int to, int dis)
void addedge(int from, int to, int dis)
int d[2001],e[100],p[100];
int dfs(int u, int flow)
}if (!_flow) d[u] = -1;
return _flow;
}bool bfs()}}
return (d[t] != -1);
}void dinic()
printf("%s\n", max_flow>=n?"yes":"no");
}int main()
return 0;
}
HDU 3605 Escape 最大流,狀壓
最大流,n比較大,但是m只有10,所以對應的人的狀態最多有2 m種,因此可以對人進行歸類,那樣n的資料量就只有1024了,求最大流 g 交會超時 要用c include include include include include define maxn 1100 define maxe 2100...
最大流 縮點 HDU 3605 Escape
有n個人,m個星球。每個人都對不同的星球有自己的喜好,每個星球都有自己的容量。問能否讓所有的人都呆在自己喜歡的星球裡。1 n 100000 m 1 m 10 以為是套模板的題,一直tle,mle。看了大佬的 才明白這題需要縮點。因為最多有10個星球,所以最多有 include include inc...
HDU 3605 Escape 狀態壓縮最大流
題目鏈結 題意n個人 範圍10w m個星球 範圍10 每個人有對星球的不同喜好,每個星球有自己的容量,問能否讓所有人都在滿意的星球上?思路一眼就是最大流 二分匹配我沒學。樸素做法s向人連邊權1,人向感興趣星球連邊權1,星球向t連邊權為容量,跑dinic,一遍tle,蕪湖 最多只有10個星球,那麼對星...