【CF】304 E. Soldier and Traveling
基础网络流,增加s和t,同时对于每个结点分裂为流入结点和流出结点。EK求最大流,判断最大流是否等于当前总人数。
1 /* 304E */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vector> 9 #include <deque> 10 #include <algorithm> 11 #include <cstdio> 12 #include <cmath> 13 #include <ctime> 14 #include <cstring> 15 #include <climits> 16 #include <cctype> 17 #include <cassert> 18 #include <functional> 19 using namespace std; 20 //#pragma comment(linker,"/STACK:102400000,1024000") 21 22 #define rep(i, a, n) for (int i=a;i<n;++i) 23 #define per(i, a, n) for (int i=n-1;i>=a;--i) 24 #define pb push_back 25 #define mp make_pair 26 #define all(x) (x).begin(),(x).end() 27 #define SZ(x) ((int)(x).size()) 28 #define lson l, mid, rt<<1 29 #define rson mid+1, r, rt<<1|1 30 31 const int maxn = 205; 32 int F[maxn][maxn]; 33 int P[maxn], a[maxn]; 34 bool visit[maxn]; 35 int ans[maxn][maxn]; 36 int ai[maxn], bi[maxn], ci[maxn]; 37 int n, m, s = 0, t; 38 bool flag = true; 39 40 bool bfs() { 41 int u, v; 42 queue<int> Q; 43 44 memset(a, 0, sizeof(a)); 45 a[s] = INT_MAX; 46 Q.push(s); 47 P[s] = s; 48 49 while (!Q.empty()) { 50 u = Q.front(); 51 Q.pop(); 52 for (v=0; v<=t; ++v) { 53 if (!a[v] && F[u][v]) { 54 P[v] = u; 55 Q.push(v); 56 a[v] = min(a[u], F[u][v]); 57 } 58 } 59 } 60 61 return a[t]==0; 62 } 63 64 int Edmonds_Karp() { 65 int u, v; 66 int ans = 0; 67 68 while (1) { 69 if (bfs()) 70 break; 71 for (u=t,v=P[u]; u!=s; u=v, v=P[u]) { 72 F[u][v] += a[t]; 73 F[v][u] -= a[t]; 74 } 75 ans += a[t]; 76 } 77 return ans; 78 } 79 80 int main() { 81 int i, j, k; 82 int s1, s2; 83 84 #ifndef ONLINE_JUDGE 85 freopen("data.in", "r", stdin); 86 freopen("data.out", "w", stdout); 87 #endif 88 89 scanf("%d %d", &n, &m); 90 t = n+n+1; 91 memset(F, 0, sizeof(F)); 92 memset(ans, 0, sizeof(ans)); 93 s1 = s2 = 0; 94 95 for (i=1; i<=n; ++i) { 96 scanf("%d", &ai[i]); 97 s1 += ai[i]; 98 F[0][i] = ai[i]; 99 } 100 101 for (i=1; i<=n; ++i) { 102 scanf("%d", &bi[i]); 103 s2 += bi[i]; 104 F[i][i+n] = INT_MAX; 105 F[i+n][t] = bi[i]; 106 } 107 108 for (i=0; i<m; ++i) { 109 scanf("%d %d", &j, &k); 110 F[j][k+n] = INT_MAX; 111 F[k][j+n] = INT_MAX; 112 } 113 114 flag = s1==s2; 115 if (flag) { 116 flag = Edmonds_Karp() == s1; 117 } 118 119 if (flag) { 120 for (i=1; i<=n; ++i) 121 for (j=n+1; j<t; ++j) 122 ans[i][j-n] = F[j][i]; 123 puts("YES"); 124 for (i=1; i<=n; ++i) { 125 for (j=1; j<=n; ++j) 126 printf("%d ", ans[i][j]); 127 putchar('\n'); 128 } 129 } else { 130 puts("NO"); 131 } 132 133 #ifndef ONLINE_JUDGE 134 printf("time = %d.\n", (int)clock()); 135 #endif 136 137 return 0; 138 }
转载于:https://www.cnblogs.com/bombe1013/p/4526102.html
【CF】304 E. Soldier and Traveling相关推荐
- 【cf】Codeforces 题解等汇总
[cf]Codeforces Round #774 (Div. 2) 前4题 [cf]Codeforces Round #774 (Div. 2) 前4题_legend_yst的博客-CSDN博客 [ ...
- cf端游界面更新显示服务器繁忙,【CF】UI界面更新了,那玩家期待已久的经典服务器呢?...
原标题:[CF]UI界面更新了,那玩家期待已久的经典服务器呢? Hello,大家好,我是你们的灵狐姐,相信小伙伴们都知道新版本更新的所有内容了!目前体验服已经正式上线,相信不久后正服也是马上更新了!本 ...
- 【cf】Codeforces Round #784(Div 4)
由于一次比赛被虐得太惨,,生发开始写blog的想法,于是便有了这篇随笔(找了个近期的cf比赛练练手(bushi))第一次写blog,多多包涵. 第二场cf比赛,第一场打的Div2,被虐太惨,所以第二场 ...
- 【论文】解读Evolutionary dynamics of traveling behavior in social networks
Evolutionary dynamics of traveling behavior in social networks 摘要 本文利用复杂网络的拓扑结构来描述出行者之间的相互作用.基于旅游者有限 ...
- 【CF】474E Pillars
H的范围是10^15,DP方程很容易想到.但是因为H的范围太大了,而n的范围还算可以接受.因此,对高度排序排重后.使用新的索引建立线段树,使用线段树查询当前高度区间内的最大值,以及该最大值的前趋索引. ...
- 【CF】142 Div.1 B. Planes
SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist. 还是蛮简单的,注意细节. 1 /* 229B */ 2 #include <io ...
- 【CF】556D A Lot of Games
构建trie树,可以得到4类结点:必胜点,必负点,完全主宰点(可胜可负),完全无法主宰点(无法控制最终胜负).递归到叶子结点,即为必胜点,回溯分情况讨论.注意叶子结点使用属性n来控制,n表示当前结点的 ...
- 【CF】3B Lorry
这道题目网上有几个题解,均有问题.其实就是简单的贪心+排序,没必要做的那么复杂. 一旦tot+curv > v时,显然curv==2, 有三种可能: (1)取出最小的curv==1的pp,装入当 ...
- 【CF】Codeforces 1702F
Equate Multisets 题目描述 Multiset -is a set of numbers in which there can be equal elements, and the or ...
最新文章
- mongoDB初识一二三
- Ubuntu 安装 Qt 开发环境 简单实现
- oracle查询最高一条记录,oracle 查询已有记录,上一条记录,下一条记录
- 计算机科学与技术专业《计算机网络原理》课程实验指导书,计算机科学导论,课程实验指导书解读.pdf...
- [css] 用css实现一个等腰三角形的小图标
- 演练 网站的导航栏 0920
- Android 学习 笔记_07. XML文件解析
- C++笔记---函数声明(prototype)
- Java进阶:SpringMVC中放行静态资源
- Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标
- linux github安装 Pytorch
- 每日一练 — 2021.12.30
- 照片怎么添加相框?分享你和好用的方法
- Multisim软件的基本使用
- 课得软件丨纵观全球程序员税后年收入,中国排在第几?
- 笔记:RT-Thread Studio 快速上手
- Java实习面试(2018春)
- 第四章 实验一 用类描述坦克
- python的Firebird驱动:FDB使用说明
- python关闭excel文件_利用Python读取和修改Excel文件(包括xls文件和xlsx文件)
热门文章
- StalinLocker:一款会在十分钟之后删除文件和数据的勒索软件
- context:component-scan标签的use-default-filters属性的作用以及原理分析
- JavaScript + CSS3 实现的海报画廊特效
- Android--多选自动搜索提示
- java字符串的替换replace、replaceAll、replaceFirst的区别详解
- Kvm虚拟化性能测试与性能优化实践
- 新浪微博自动发送微博 功能已实现(net)
- 山东CIO智库会员参观徐工信息公司
- Vue.js 判断对象属性是否存,不存在添加
- 一场改变你投资生涯的讨论:职业德州扑克手看交易