基础网络流,增加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相关推荐

  1. 【cf】Codeforces 题解等汇总

    [cf]Codeforces Round #774 (Div. 2) 前4题 [cf]Codeforces Round #774 (Div. 2) 前4题_legend_yst的博客-CSDN博客 [ ...

  2. cf端游界面更新显示服务器繁忙,【CF】UI界面更新了,那玩家期待已久的经典服务器呢?...

    原标题:[CF]UI界面更新了,那玩家期待已久的经典服务器呢? Hello,大家好,我是你们的灵狐姐,相信小伙伴们都知道新版本更新的所有内容了!目前体验服已经正式上线,相信不久后正服也是马上更新了!本 ...

  3. 【cf】Codeforces Round #784(Div 4)

    由于一次比赛被虐得太惨,,生发开始写blog的想法,于是便有了这篇随笔(找了个近期的cf比赛练练手(bushi))第一次写blog,多多包涵. 第二场cf比赛,第一场打的Div2,被虐太惨,所以第二场 ...

  4. 【论文】解读Evolutionary dynamics of traveling behavior in social networks

    Evolutionary dynamics of traveling behavior in social networks 摘要 本文利用复杂网络的拓扑结构来描述出行者之间的相互作用.基于旅游者有限 ...

  5. 【CF】474E Pillars

    H的范围是10^15,DP方程很容易想到.但是因为H的范围太大了,而n的范围还算可以接受.因此,对高度排序排重后.使用新的索引建立线段树,使用线段树查询当前高度区间内的最大值,以及该最大值的前趋索引. ...

  6. 【CF】142 Div.1 B. Planes

    SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist. 还是蛮简单的,注意细节. 1 /* 229B */ 2 #include <io ...

  7. 【CF】556D A Lot of Games

    构建trie树,可以得到4类结点:必胜点,必负点,完全主宰点(可胜可负),完全无法主宰点(无法控制最终胜负).递归到叶子结点,即为必胜点,回溯分情况讨论.注意叶子结点使用属性n来控制,n表示当前结点的 ...

  8. 【CF】3B Lorry

    这道题目网上有几个题解,均有问题.其实就是简单的贪心+排序,没必要做的那么复杂. 一旦tot+curv > v时,显然curv==2, 有三种可能: (1)取出最小的curv==1的pp,装入当 ...

  9. 【CF】Codeforces 1702F

    Equate Multisets 题目描述 Multiset -is a set of numbers in which there can be equal elements, and the or ...

最新文章

  1. mongoDB初识一二三
  2. Ubuntu 安装 Qt 开发环境 简单实现
  3. oracle查询最高一条记录,oracle 查询已有记录,上一条记录,下一条记录
  4. 计算机科学与技术专业《计算机网络原理》课程实验指导书,计算机科学导论,课程实验指导书解读.pdf...
  5. [css] 用css实现一个等腰三角形的小图标
  6. 演练 网站的导航栏 0920
  7. Android 学习 笔记_07. XML文件解析
  8. C++笔记---函数声明(prototype)
  9. Java进阶:SpringMVC中放行静态资源
  10. Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标
  11. linux github安装 Pytorch
  12. 每日一练 — 2021.12.30
  13. 照片怎么添加相框?分享你和好用的方法
  14. Multisim软件的基本使用
  15. 课得软件丨纵观全球程序员税后年收入,中国排在第几?
  16. 笔记:RT-Thread Studio 快速上手
  17. Java实习面试(2018春)
  18. 第四章 实验一 用类描述坦克
  19. python的Firebird驱动:FDB使用说明
  20. python关闭excel文件_利用Python读取和修改Excel文件(包括xls文件和xlsx文件)

热门文章

  1. StalinLocker:一款会在十分钟之后删除文件和数据的勒索软件
  2. context:component-scan标签的use-default-filters属性的作用以及原理分析
  3. JavaScript + CSS3 实现的海报画廊特效
  4. Android--多选自动搜索提示
  5. java字符串的替换replace、replaceAll、replaceFirst的区别详解
  6. Kvm虚拟化性能测试与性能优化实践
  7. 新浪微博自动发送微博 功能已实现(net)
  8. 山东CIO智库会员参观徐工信息公司
  9. Vue.js 判断对象属性是否存,不存在添加
  10. 一场改变你投资生涯的讨论:职业德州扑克手看交易