2502: 清理雪道
来源:互联网 发布:mac怎么装flash插件 编辑:程序博客网 时间:2024/05/12 17:45
2502: 清理雪道
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 719 Solved: 383
[Submit][Status][Discuss]
Description
滑雪场坐落在FJ省西北部的若干座山上。
从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向。
你的团队负责每周定时清理雪道。你们拥有一架直升飞机,每次飞行可以从总部带一个人降落到滑雪场的某个地点,然后再飞回总部。从降落的地点出发,这个人可以顺着斜坡向下滑行,并清理他所经过的雪道。
由于每次飞行的耗费是固定的,为了最小化耗费,你想知道如何用最少的飞行次数才能完成清理雪道的任务。
Input
输入文件的第一行包含一个整数n (2 <= n <= 100) – 代表滑雪场的地点的数量。接下来的n行,描述1~n号地点出发的斜坡,第i行的第一个数为mi (0 <= mi < n) ,后面共有mi个整数,由空格隔开,每个整数aij互不相同,代表从地点i下降到地点aij的斜坡。每个地点至少有一个斜坡与之相连。
Output
输出文件的第一行是一个整数k – 直升飞机的最少飞行次数。
Sample Input
8
1 3
1 7
2 4 5
1 8
1 8
0
2 6 5
0
1 3
1 7
2 4 5
1 8
1 8
0
2 6 5
0
Sample Output
4
HINT
Source
2011福建集训
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>#include<queue>#include<set>#include<map>#include<stack>#include<bitset>#include<ext/pb_ds/priority_queue.hpp>using namespace std;const int maxn = 233;const int maxm = 2E5 + 20;const int INF = ~0U>>1;struct E{int to,cap,flow; E(){}E(int to,int cap,int flow): to(to),cap(cap),flow(flow){}}edgs[maxm];int n,s,t,S,T,sum,cnt,in[maxn],out[maxn],L[maxn],cur[maxn];vector <int> v[maxn];queue <int> Q;void Add(int x,int y,int cap){v[x].push_back(cnt); edgs[cnt++] = E(y,cap,0);v[y].push_back(cnt); edgs[cnt++] = E(x,0,0);}int Dfs(int x,int a){if (x == T) return a; int flow = 0;for (int &i = cur[x]; i < v[x].size(); i++){E &e = edgs[v[x][i]];if (e.cap == e.flow || L[e.to] != L[x] + 1) continue;int f = Dfs(e.to,min(a,e.cap - e.flow));if (!f) continue; flow += f; e.flow += f;edgs[v[x][i]^1].flow -= f; a -= f;if (!a) return flow;}if (!flow) L[x] = -1; return flow;}bool BFS(){for (int i = 1; i <= T; i++) L[i] = 0;L[S] = 1; Q.push(S);while (!Q.empty()){int k = Q.front(); Q.pop();for (int i = 0; i < v[k].size(); i++){E e = edgs[v[k][i]];if (e.cap == e.flow || L[e.to]) continue;L[e.to] = L[k] + 1; Q.push(e.to);}}return L[T];}int Dinic(){int MaxFlow = 0;while (BFS()){for (int i = 1; i <= T; i++) cur[i] = 0;MaxFlow += Dfs(S,INF);}return MaxFlow;}int main(){#ifdef DMCfreopen("DMC.txt","r",stdin);#endifcin >> n; s = n + 1; t = s + 1; S = t + 1; T = S + 1;for (int i = 1; i <= n; i++){int k; scanf("%d",&k);while (k--){int x; scanf("%d",&x);++out[i]; ++in[x]; Add(i,x,INF);}}for (int i = 1; i <= n; i++){Add(s,i,INF); Add(i,t,INF);int du = in[i] - out[i];if (du > 0) Add(S,i,du),sum += du;else if (du < 0) Add(i,T,-du);}Dinic(); Add(t,s,INF); cout << Dinic();return 0;}
0 0
- 2502: 清理雪道
- bzoj-2502 清理雪道
- bzoj 2502: 清理雪道
- BZOJ 2502 清理雪道
- BZOJ 2502: 清理雪道
- BZOJ 2502 清理雪道 最小流
- bzoj2502 清理雪道
- 清理雪道
- BZOJ2502: 清理雪道
- 【bzoj2502】清理雪道
- 清理雪道
- bzoj2502 清理雪道
- 2502: 清理雪道 有源汇上下界最小流
- [上下界网络流] BZOJ 2502 清理雪道
- BZOJ 2502(清理雪道-上下界网络流)
- bzoj 2502: 清理雪道 有源汇最小流
- [BZOJ 2502]清理雪道:上下界网络流
- 【bzoj2502】【清理雪道】【最小流】
- 最长句子
- Ubuntu 环境变量
- JAVA处理线程超时
- gps两种解码的方式
- tableview点击变cell背景颜色问题
- 2502: 清理雪道
- ListView的标准写法
- Android 跳转到应用市场详细信息页面
- Xcode 使用Git提交代码到本地仓库时,提示这个错误
- 菜鸟跟大家一起学ndk(一)
- Linux命令全称
- APP如何获得手机的个人热点的状态
- 自定义view 五角星 国旗
- Maven实战:pom.xml与settings.xml