UVA11248_Frequency Hopping
给一个有向网络,求其1,n两点的最大流量是否不小于C,如果小于,是否可以通过修改一条边的容量使得最大流量不小于C?
首先对于给定的网络,我们可以先跑一遍最大流,然后先看流量是否大于C。
然后保存跑完第一次最大流后的残余网络容量情况,然后接下来对于每条割,将分别其容量加C-maxflow,看看能否得到满足条件的流量即可。
召唤代码君:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 1110
#define maxm 222220
#define mp(x,y) make_pair(x,y)
using namespace std; typedef pair<int,int> pr;
int C[maxm];
int to[maxm],next[maxm],c[maxm],first[maxn],edge;
int d[maxn],tag[maxn],TAG=;
bool can[maxn];
int Q[maxn],bot,top;
int n,m,cmax,s,t,cas=;
vector<pr> ans; void _init()
{
edge=-;
s=,t=n;
for (int i=; i<=n; i++) first[i]=-;
} void addedge(int U,int V,int W)
{
edge++;
to[edge]=V,c[edge]=W,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=,next[edge]=first[V],first[V]=edge;
} bool bfs()
{
Q[bot=top=]=t,d[t]=,tag[t]=++TAG,can[t]=false;
while (bot<=top)
{
int cur=Q[bot++];
for (int i=first[cur]; i!=-; i=next[i])
if (c[i^]> && tag[to[i]]!=TAG)
{
d[to[i]]=d[cur]+,Q[++top]=to[i];
can[to[i]]=false,tag[to[i]]=TAG;
if (to[i]==s) return true;
}
}
return false;
} int dfs(int cur,int num)
{
if (cur==t) return num;
int tmp=num,k;
for (int i=first[cur]; i!=-; i=next[i])
if (c[i]> && tag[to[i]]==TAG && d[to[i]]==d[cur]- && !can[to[i]])
{
k=dfs(to[i],min(num,c[i]));
if (k) num-=k,c[i]-=k,c[i^]+=k;
if (!num) break;
}
if (num) can[cur]=true;
return tmp-num;
} int maxflow()
{
int flow=;
while (bfs()) flow+=dfs(s,cmax);
return flow;
} int main()
{
int U,V,W,last;
while (scanf("%d%d%d",&n,&m,&cmax) && (n))
{
_init();
for (int i=; i<=m; i++)
{
scanf("%d%d%d",&U,&V,&W);
addedge(U,V,W);
}
printf("Case %d: ",++cas);
last=maxflow();
if (last>=cmax)
{
puts("possible");
continue;
}
ans.clear();
for (int i=; i<=edge; i++) C[i]=c[i];
for (int i=; i<=edge; i+=)
{
if (c[i]+c[i+]>cmax) continue;
c[i]+=cmax-last-c[i];
if (last+maxflow()>=cmax) ans.push_back(mp(to[i+],to[i]));
for (int j=; j<=edge; j++) c[j]=C[j];
}
if (ans.size()==) puts("not possible");
else
{
sort(ans.begin(),ans.end());
printf("possible option:(%d,%d)",ans[].first,ans[].second);
for (unsigned i=; i<ans.size(); i++)
printf(",(%d,%d)",ans[i].first,ans[i].second);
printf("\n");
}
}
return ;
}
UVA11248_Frequency Hopping的更多相关文章
- UVA 11248 - Frequency Hopping(网络流量)
UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...
- uva 11248 Frequency Hopping (最大流)
uva 11248 Frequency Hopping 题目大意:给定一个有向网络,每条边均有一个容量. 问是否存在一个从点1到点N.流量为C的流.假设不存在,能否够恰好改动一条弧的容量,使得存在这种 ...
- UVA 11248 Frequency Hopping
Frequency Hopping Time Limit: 10000ms Memory Limit: 131072KB This problem will be judged on UVA. Ori ...
- 第三十一个知识点:Game Hopping证明
第三十一个知识点:Game Hopping证明 关于安全证明, 目前主流的方法有安全归约证明 (由 single game 实现) 和 Game Hopping (由 game sequence 实现 ...
- uva 10801 - Lift Hopping(最短路Dijkstra)
/* 题目大意: 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra , ...
- Uvaoj 11248 Frequency Hopping(Dinic求最小割)
题意:1到n节点(节点之间有一定的容量),需要流过C的流量,问是否可以?如果可以输出possible, 否则如果可以扩大任意一条边的容量 可以达到目的,那么输出possible option:接着输出 ...
- UVa 10801 - Lift Hopping(dijkstra最短路)
根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图.然后利用dijkstra求出最短的时间,注意每次换乘电梯需要等待60s(因为同一个电梯上的楼层是相互 ...
- UVa 821 Page Hopping【Floyd】
题意:给出一个n个点的有向图,任意两个点之间都相互到达,求任意两点间最短距离的平均值 因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可 ...
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
题意: 有n<6部电梯,给出每部电梯可以停的一些特定的楼层,要求从0层到达第k层出来,每次换乘需要60秒,每部电梯经过每层所耗时不同,具体按 层数*电梯速度 来算.问经过多少秒到达k层(k可以为 ...
随机推荐
- linux下的python3,virtualenv,Mysql,nginx,redis安装配置
Mysql安装和使用:点我 Redis安装和使用:点我 centos7安装Python3以及tab补全键的使用:点我 Linux下的virtualenv:点我 nginx的安装和使用:点我
- ncl 函数源码 gc_inout
转自气象家园论坛 经过不懈努力,终于找到了gc_inout函数的源代码,原来在这个文件里面!一颗赛艇 位置:/ncl_ncarg-6.5.0-src/ni/src/lib/nfpfort/sg_too ...
- Maven仓库 - 分发构件至远程仓库
分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使 ...
- yum指令常用参数说明
1.使用YUM查找软件包 命令:yum search 2.列出所有可安装的软件包 命令:yum list 3.列出所有可更新的软件包 命令:yum list updates 4.列出所有已安装的软件包 ...
- Unity3D画面渲染官方教程(一)对光照和渲染的介绍
本系列是对官方教程的翻译加上自己的一些理解译著的,官方网址:https://unity3d.com/cn/learn/tutorials/s/graphics 翻译上尽量保证准确性,但不排除省略或者添 ...
- 【CodeForces-1041C】Coffee Break(二分解决关于set,pair,upper_bound用法)
//题意:一个的工作时间是m分钟. // 在特定的时间和咖啡 n a1,a2....an,, ai代表的是每个咖啡要在一天中对应的时间点喝掉 // 每一次喝咖啡的时间为1分钟 // 必须在一天中的ai ...
- springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)
今天做博客demo的时候遇到了这样的问题:当我用ajax进行资源请求时,需要顺便将账户信息存入session.但是后来发现有@Responsebody标签时,直接用HttpSession存数据时,根本 ...
- Docker配置
Docker基本配置 1.安装 在ubuntu下面执行 wget -qO- https://get.docker.com/ | sh 命令安装Docker. 如果命令的方式无法安装,也可以使用apt- ...
- Windows ,获取硬盘物理序列号(VC++)
#include <windows.h> BOOL GetHDID(PCHAR pIDBufer) { HANDLE hDevice=NULL; hDevice=::Crea ...
- IIS6/IIS7环境下实现支持mp4视频随意拖动、预览播放、边下载边播放
前几天,一客户需要在IIS环境下实现MP4视频可以随意拖动观看,边下载边播放.一看这要求,IIS本身是无法实现,想着应该需要用插件,于是GG一番,还真找到这样的插件,此组件为H264-Streamin ...