日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[codevs 1034] 家园

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [codevs 1034] 家园 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://codevs.cn/problem/1034/


題解:

按照時(shí)間建立分層圖,建立超級(jí)源和超級(jí)匯,最大流量等于總?cè)藬?shù)時(shí)就退出。


代碼:

錯(cuò)哪了呢?

狀態(tài):?運(yùn)行錯(cuò)誤(內(nèi)存訪問非法) Runtime Error?
得分 :?60?
總時(shí)間耗費(fèi):?48ms?
總內(nèi)存耗費(fèi):?10 kB

#include<cstdio> #include<iostream> #include<vector> #include<queue> #include<algorithm> using namespace std;const int maxm = 20 + 10; const int maxn = 20000 + 10; const int INF = 1000000007;struct Edge {int from, to, cap, flow; };vector<Edge> edges; vector<int> G[maxn];void AddEdge(int from, int to, int cap) {edges.push_back((Edge){from, to, cap, 0});edges.push_back((Edge){to, from, 0, 0});int m = edges.size();G[from].push_back(m-2);G[to].push_back(m-1); }int n, m, k; int s = 0, t = 1; int c = 0;#define earth 3 #define moon 2int d[maxn], cur[maxn]; bool vis[maxn];bool BFS() {memset(vis, 0, sizeof(vis));memset(d, 0, sizeof(d));vis[s] = 1; d[s] = 0;queue<int> Q;Q.push(s);while(!Q.empty()) {int x = Q.front(); Q.pop();for(int i = 0; i < G[x].size(); i++) {Edge& e = edges[G[x][i]];if(e.cap > e.flow && !vis[e.to]) {Q.push(e.to);vis[e.to] = 1;d[e.to] = d[x] + 1;}}}return vis[t]; }int DFS(int x, int a) {if(x == t || a == 0) return a;int f, flow = 0;for(int &i = cur[x]; i < G[x].size(); i++) {Edge& e = edges[G[x][i]];if(e.cap > e.flow && (f = DFS(e.to, min(a, e.cap-e.flow))) > 0) {flow += f;a -= f;edges[G[x][i]].flow += f;edges[G[x][i]^1].flow -= f;}}return flow; }int Maxflow(int& flow) {while(BFS()) {memset(cur, 0, sizeof(cur));flow += DFS(s, INF);}return flow; }int hp[maxm], p[maxm]; vector<int> cycle[maxm];int encode(int x) {return n*c + x; }void refresh_graph() {for(int x = 1; x <= m; x++) {int r = cycle[x].size();int y = encode(cycle[x][c%r]);if(p[x]) {AddEdge(p[x], y, hp[x]);AddEdge(p[x], encode(cycle[x][(c-1)%r]), k);}p[x] = y;}for(int i = encode(moon); i <= encode(n); i++) AddEdge(i-n, i, k);AddEdge(encode(moon), t, INF);for(int i = 0; i < edges.size(); i++) {Edge& e = edges[i];if(!e.cap) e.flow = 0;} }//0: super source //1: super terminal //2: the moon at 1'c //3: the earth at 1'cbool g[maxm][maxm]; bool is_scc() {g[s][earth] = g[moon][t] = 1;for(int x = 1; x <= m; x++)for(int i = 0; i < cycle[x].size()-1; i++) {int from = cycle[x][i];int to = cycle[x][i+1];g[from][to] = g[to][from] = 1;}queue<int> Q;Q.push(s);vis[s] = 1;while(!Q.empty()) {int x = Q.front(); Q.pop();for(int i = 0; i <= n+1; i++) if(g[x][i] && !vis[i]) {vis[i] = 1;Q.push(i);}}return vis[t]; }int main() {cin >> n >> m >> k;for(int x = 1; x <= m; x++) {int cnt; cin >> hp[x] >> cnt;for(int i = 1; i <= cnt; i++) {int y; cin >> y;cycle[x].push_back(y+3);}p[x] = cycle[x][0];}n += 2;AddEdge(s, encode(earth), k);AddEdge(encode(moon), t, k);if(is_scc()) {int flow = 0;while(1) {c++;refresh_graph();if(Maxflow(flow) >= k) {cout << c << endl;break;}}} else {cout << 0 << endl;}return 0; }

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的[codevs 1034] 家园的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。