生活随笔
收集整理的這篇文章主要介紹了
【luogu P1343 地震逃生】 题解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:https://www.luogu.org/problemnew/show/P1343
菜
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10000 + 10;
const int inf = 1e9;
int n, m, x, s, t, deep[maxn], maxflow;
struct edge{int next, to, len;
}e[maxn<<2];
int head[maxn], cnt = -1, cur[maxn];
queue<int> q;
void add(int u, int v, int w, bool flag)
{e[++cnt].next = head[u];e[cnt].to = v;if(flag) e[cnt].len = w;head[u] = cnt;
}
bool bfs(int s, int t)
{memset(deep, 0x7f, sizeof(deep));while(!q.empty()) q.pop();for(int i = 1; i <= n; i++) cur[i] = head[i];q.push(s); deep[s] = 0;while(!q.empty()){int now = q.front(); q.pop();for(int i = head[now]; i != -1; i = e[i].next){if(deep[e[i].to] > inf && e[i].len){deep[e[i].to] = deep[now] + 1;q.push(e[i].to);}}}if(deep[t] < inf) return true;else return false;
}
int dfs(int now, int t, int limit)
{if(!limit || now == t) return limit;int flow = 0, f;for(int i = cur[now]; i != -1; i = e[i].next){cur[now] = i;if(deep[e[i].to] == deep[now] + 1 && (f = dfs(e[i].to, t, min(e[i].len, limit)))){flow += f;limit -= f;e[i].len -= f;e[i^1].len += f;if(!limit) break;}}return flow;
}
void Dinic(int s, int t)
{while(bfs(s, t))maxflow += dfs(s, t, inf);
}
int main()
{memset(head, -1, sizeof(head));scanf("%d%d%d",&n,&m,&x);s = 1, t = n;for(int i = 1; i <= m; i++){int u, v, w;scanf("%d%d%d",&u,&v,&w);add(u, v, w, 1);add(v, u, w, 0);}Dinic(s, t);if(maxflow == 0){printf("Orz Ni Jinan Saint Cow!\n");return 0;}int ans;if(x % maxflow == 0)ans = x/maxflow;elseans = x/maxflow + 1;printf("%d %d",maxflow,ans);return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/MisakaAzusa/p/9431876.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的【luogu P1343 地震逃生】 题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。