CodeForces - 269C Flawed Flow
http://codeforces.com/problemset/problem/269/C
题目大意:
给定一个边没有定向的无法增广的残量网络且1是源点,n是汇点,给定每条边中的流。
让你把所有边定向的同时保证这是一个合法的无法增广的无环残量网络(n,m <=2*10^5)
题解:
这道题首先从流量守恒的角度入手
我们知道对于每个中间点来说一定满足流量守恒性质(流入量 == 流出量)
而我们又可以对所有相连的边权加和求得所有(流入它)的和(流出的它的)流量之和
所以我们可以直接把相连的边的权值之和加起来除以2,这样就可以算出来它的流入量
相应的,我们就知道了它的流出量
但是我们知道了所有边的流入流出量有什么用呢?
如果我们知道了一个点的所有的流入量,那我们是不是就可以知道剩下的边一定是向外的呢?
答案是肯定的
这时候我们想,要是每次我们都至少有一个点的流入都已知
那我就可以通过剩下的边都流向外面的方式去更新剩余的节点的流入量了
这种好事有没有呢?
有!并且这样的点在每次更新完后一定至少存在一个!
所以我们直接使用类似于拓扑排序的过程来解决这道题就可以了!!!!
下面来证明这样的点一定存在:
假设在几次更新后(第一次一定存在,即源点1),不存在一个流入量已知的点,设其为u
那么我们知道,一定存在一条流 <x,u>是我们没有成功定向的,所以说x也没有定向!
这样我们无限向前迭代,会出现两种情况
1.我们无限迭代后,回到了源点(x = 1)。
这种情况下,我们知道如果x = 1那么一定知道流<x,u>已经定向方向,矛盾,不成立.
2.我们无限迭代,一直处在一个循环里。
这种情况不可能发生。因为流网络中不可能存在环。所以这种情况也不成立
所以两种情况都不成立,故不存在这样的点u
所以,至少存在一个可更新的点,证明完毕
Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=*x+ch-'',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = ;
struct Edge{
int to,next,flow;
bool flag;
}G[maxn<<];
int head[maxn],cnt=;
inline void add(int u,int v,int c){
G[++cnt].to = v;
G[cnt].next = head[u];
G[cnt].flow = c;
head[u] = cnt;
}
int q[maxn],l,r,flow[maxn],n;
#define v G[i].to
inline void bfs(){
l = ;r = -;q[++r] = ;
while(l <= r){
int u = q[l++];
for(int i = head[u];i;i=G[i].next){
if(G[i].flag || G[i^].flag) continue;
G[i].flag = true;
flow[v] -= G[i].flow;
if(flow[v] == && v != n) q[++r] = v;
}
}
}
#undef v
int main(){
int m;read(n);read(m);
for(int i=,u,v,d;i<=m;++i){
read(u);read(v);read(d);
add(u,v,d);add(v,u,d);
flow[u] += d;flow[v] += d;
}
for(int i=;i<=n;++i) flow[i] >>= ;
bfs();
for(int i=;i<=cnt;i+=){
printf("%d\n",G[i^].flag);
}
getchar();getchar();
return ;
}
CodeForces - 269C Flawed Flow的更多相关文章
- codeforces 269C Flawed Flow(网络流)
Emuskald considers himself a master of flow algorithms. Now he has completed his most ingenious prog ...
- Codeforces 269C Flawed Flow (看题解)
我好菜啊啊啊.. 循环以下操作 1.从队列中取出一个顶点, 把哪些没有用过的边全部用当前方向. 2.看有没有点的入度和 == 出度和, 如果有将当前的点加入队列. 现在有一个问题就是, 有没有可能队列 ...
- Codeforces 270E Flawed Flow 网络流问题
题意:给出一些边,给出边的容量.让你为所有边确定一个方向使得流量最大. 题目不用求最大流, 而是求每条边的流向,这题是考察网络流的基本规律. 若某图有最大,则有与源点相连的边必然都是流出的,与汇点相连 ...
- 网络流相关(拓扑)CodeForces 269C:Flawed Flow
Emuskald considers himself a master of flow algorithms. Now he has completed his most ingenious prog ...
- @codeforces - 708D@ Incorrect Flow
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个有源点与汇点的图 G,并对于每一条边 (u, v) 给定 ...
- Codeforces Round #165 (Div. 2)
C. Magical Boxes 问题相当于求\[2^p \gt \max{a_i \cdot 2^{k_i}},p \gt k_i\] D. Greenhouse Effect \(dp(i,j)\ ...
- Educational Codeforces Round 45 (Rated for Div. 2) F - Flow Control
F - Flow Control 给你一个有向图,要求你给每条边设置流量,使得所有点的流量符合题目给出的要求. 思路:只有在所有点的流量和为0时有解,因为增加一条边的值不会改变所有点的总流量和, 所以 ...
- Codeforces 717G Underfail(最小费用最大流 + AC自动机)
题目 Source http://codeforces.com/problemset/problem/717/G Description You have recently fallen throug ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)
A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...
随机推荐
- PHP对URL设置
一.URL规则 1.默认是区分大小写的 2.如果我们不想区分大小写可以改配置文件 'URL_CASE_INSENSITIVE'=>true, //url不区分 ...
- 网站加载有商务通、商桥,定义js函数触发快商通代码
有的网站已经加载了商务通.商桥的,前期定义了js函数 触发商务通.商桥代码的,可以重新定义新的函数对之前的函数进行覆盖,其 js代码为: var domain = document.domain; / ...
- bzoj 2510: 弱题 循环矩阵
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 61[Submit][Status][Discuss] De ...
- uva 1396 - Most Distant Point from the Sea
半平面的交,二分的方法: #include<cstdio> #include<algorithm> #include<cmath> #define eps 1e-6 ...
- Android 常用权限
添加WiFi以及访问网络的权限: <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ...
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener(Maven工程)
Eclipse中tomcat部署工程启动后报错: 严重: Error configuring application listener of class org.springframework.web ...
- 【Xamarin开发 Android 系列 6】 Android 结构基础(上)
原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...
- [译]GotW #2: Temporary Objects
不必要的和(或)临时的变量经常是罪魁祸首,它让你在程序性能方面的努力功亏一篑.如何才能识别出它们然后避免它们呢? Problem JG Question: 1. 什么是临时变量? Guru Q ...
- 转:三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)
http://blog.csdn.net/liujun13579/article/details/7772215 边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH ...
- Xmanager Enterprise 4 使用说明
Xmanager Enterprise 4 使用说明 安装Xmanager Enterprise 4操作步骤比较简单,下一步即可完成. Xbrowser 使用xdcmp 协议通过图形化桌面远程连接到l ...