UVA11248 网络流
来源:互联网 发布:ipad照片怎么导入mac 编辑:程序博客网 时间:2024/06/05 06:25
Description
E
Frequency Hopping
Input: Standard Input
Output: Standard Output
20th July, 1942
Colonel Al Pacheno,
According to the previous order “ref: 232/UK44i/334sda#nh$X3y”, you are required back in the DOI (Department of intelligence, London ) to head the special programming contingent immediately. You are to assign a programmer for the job whose specification is attached with this letter.
Level 3 Secrecy must be maintained.
Sincerely,
General Shaan Konary
Director, DOI
London
Ps: Sorry to ruin your Caribbean holiday
232/UK44i/334sda#nh$X3y/Appx-301a
At this moment, through out Europe , our base station numbers 1 to N are actively operational through wireless channels. Immediately we require sendingC secret message fragments from our head quarters (base station 1) toNth base station. Germans have developed Zämmhäim– a machine which jams the frequency channel between base stations after a station has sent a message fragment. In that case, the base stations must transmit using a different frequency channel for each message fragment. There are several unidirectional channels set up between base stations at this moment. We can only make arrangements to set up number of frequency channels only between two base stations. Your task is to check whether all the message fragments can be sent to the desired base station with or without increasing frequency channel between any two particular base stations. You have to give us all possible options if it is required to increase frequency channel between two stations.
--End of Attachment
As members of Secret Programmers Group (SPG) you are assigned to solve this problem within 5 hrs and deliver the solution directly toColonel Al Pacheno. You have to maintain Level 3 secrecy and destroy all documents corresponding to this as soon as you deliver the solution.
Input:
There will be multiple test cases. The first line of each test case contains three numbersN, E and C where N (0<N<101) represents the number of base stations, E (E<10000) represents the number of available connections between the base stations andC (C<2000000000) represents the number of secret message fragments that are required to send from station 1 to station N. After that, there will be E lines. Each line contains 3 numbers:b1(0<b1<101), b2(0<b2<101) andfp(0<fp<5001) which represent the number of frequency channels available currently fromb1 to b2. Input is terminated when N=E=C=0.
Output:
For each test case, there will be one line of output. First, you have to print the case number. If it is possible to sendC secret message fragments from the current status the output will be“possible”. Otherwise, you have to print all pairs of stations (in ascending order) if it is possible send the required message fragments by increasing the frequency channel between any one of them. If it is still impossible, you have to print “not possible”.
Sample Input Output for Sample Input
4 4 5
1 2 5
1 3 5
2 4 5
3 4 5
4 4 5
1 2 1
1 3 5
2 4 5
3 4 1
4 4 5
1 2 1
1 3 1
2 4 1
3 4 1
0 0 0
Case 1: possible
Case 2: possible option:(1,2),(3,4)
Case 3: not possible
Problemsetter: Syed Monowar Hossain
Special Thanks: Abdullah al Mahmud
太粗心了,在check函数里把j写成了i导致一直wa。。。
题意:给你一些边和容量限制,问是否存在从1到N大小为C的流,不存在的话能否通过增加某一条边的容量来实现。
思路:先求一次最大流,如果最大流大于等于C,显然可行,否则枚举满流的边(最小割),给这些边增加容量。看能否使流量增加到C。增广的时候在先前的最大流的基础上增广。否则会tle。。。
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<queue> using namespace std; typedef long long LL;const LL INF = 1LL << 51;const int MAXN=150;int n,E,s,t;LL C; int cur[MAXN],d[MAXN],vis[MAXN]; struct Edge { int from,to; LL cap,flow; bool operator < (const Edge &A)const{ return from<A.from||(from==A.from&&to<A.to); } }; std::vector<Edge>edges,ans,tmpe; std::vector<int>G[MAXN]; void init(int n){for(int i=0;i<n;i++)G[i].clear();edges.clear();tmpe.clear();}void addedge(int u,int v,int w){ edges.push_back((Edge){u,v,w,0}); edges.push_back((Edge){v,u,0,0}); int m=edges.size(); G[u].push_back(m-2); G[v].push_back(m-1); } int bfs(int s,int t) { memset(vis,0,sizeof vis); queue<int>q; q.push(s); memset(d,-1,sizeof d); vis[s]=1; d[s]=0; while(!q.empty()){ int u=q.front();q.pop(); for(int i=0;i<G[u].size();i++){ Edge &e=edges[G[u][i]]; if(!vis[e.to]&&e.cap>e.flow){ q.push(e.to); vis[e.to]=1; d[e.to]=d[u]+1; } } } return vis[t]; } LL dfs(int x,LL a,int t){ if(x==t||a==0)return a; LL flow=0,f=0; for(int &i=cur[x];i<G[x].size();++i){ Edge &e=edges[G[x][i]]; if(d[e.to]==d[x]+1&&(f=dfs(e.to,min(a,e.cap-e.flow),t))>0){ e.flow+=f; edges[G[x][i]^1].flow-=f; flow+=f; a-=f; if(a==0)break; } } return flow; } LL dinic(int s,int t,LL c){ LL flow=0; while(bfs(s,t)){ memset(cur,0,sizeof cur); flow+=dfs(s,INF,t); if(flow>=c)return flow; } return flow; } void get_cut(int s,int t,vector<int>& v){v.clear();int sz=edges.size();for(int i=0;i<sz;i+=2){Edge &e=edges[i];if(vis[e.from]&&!vis[e.to]){v.push_back(i);}}}int check(int s,int t,LL c){std::vector<int>cut;get_cut(s,t,cut);int sz=edges.size();tmpe.clear();for(int i=0;i<sz;i++)tmpe.push_back(edges[i]);ans.clear();for(int i=0;i<cut.size();i++){Edge &e=edges[cut[i]];e.cap=e.flow+C;if(dinic(s,t,c)>=c){ans.push_back(e);}edges.clear();for(int j=0;j<sz;++j)edges.push_back(tmpe[j]);}return ans.size();}int main(){ int cas=1; while(scanf("%d%d%lld",&n,&E,&C)!=EOF) { if(n==0&&E==0&&C==0)return 0; init(n); int u,v,w; while(E--) { scanf("%d%d%d",&u,&v,&w); u--,v--; addedge(u,v,w); } printf("Case %d: ", cas++); s=0,t=n-1; LL an=dinic(s,t,C); if(!C||an>=C){ puts("possible"); continue; } int m=check(s,t,C-an); if(!m)puts("not possible"); else{ sort(ans.begin(), ans.end()); printf("possible option:(%d,%d)", ans[0].from+1, ans[0].to+1); for(int i=1;i<m;i++)printf(",(%d,%d)",ans[i].from+1,ans[i].to+1); puts(""); } } return 0;}
- UVA11248 网络流
- UVA11248【最大流最小割入门】
- UVA11248 网络扩容(枚举割边扩充)
- UVa11248 Frequency Hopping(最大流+最小割)
- [刷题]UVA11248
- uva11248 Frequency Hopping
- UVa11248 - Frequency Hopping
- uva11248 最短路增广 Dinic算法
- 【网络流】网络扩容
- 网络流
- 网络流
- 网络流
- 网络流
- 网络流
- 网络流
- 网络流
- 【网络流】
- 【网络流】
- 使用RadUpload控件上传大文件时出现如下bug,请大虾帮忙解决下RadUpload Ajax callback error.Source url returned invalid content
- tomcat启用gzip压缩
- 函数返回值的问题
- 《算法竞赛入门经典(第2版)》代码 Chapter 1
- TCP/IP详解--滑动窗口、拥塞窗口、慢启动、Negle算法
- UVA11248 网络流
- uva532
- DHCP通信原理 -- 路由
- iOS 数据格式
- ckermit在linux上的使用安装(redhat/ubuntu)
- Ubuntu 12.04LTS安装PPTP
- Linux netstat命令详解
- Unity 3D-- 摄像机Clear Flags和Culling Mask属性用途详解
- netlink多播