/***********************************************
最大流算法(dinic)
在深搜时,刚开始没有把d[cur] = -1超时,改之后就好了
相当于一个剪枝操作
***********************************************/
#include <iostream>
#include <queue>
#include <cstring>
#include <fstream>
#include <cstdio>using namespace std;const int MAXD = 7200;
const int MAXM = 36000;
const int INF = 1000000000;int first[MAXD], next[MAXM], u[MAXM], v[MAXM], flow[MAXM];
int d[MAXD];
int s, a, b;
int e;void init();
void add(int x, int y, int f);
int bfs();
int dfs(int cur, int f);
int dinic();int main(int argc, char *argv[])
{int t;#ifndef ONLINE_JUDGEfreopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endif // ONLINE_JUDGEscanf("%d", &t);while (t--) {init();int ans = dinic();if (ans)printf("possible\n");elseprintf("not possible\n");}return 0;
}void init()
{e = 0;//cin >> s >> a >> b;scanf("%d%d%d", &s, &a, &b);memset(first, -1, sizeof(first));memset(flow, 0, sizeof(flow));for (int i = 1; i <= a; i++) {int z = a + i;add(2 * z ^ 1, 1, 1);add(1, 2 * z ^ 1, 0);}for (int i = 1; i <= s; i++) {int z = i * a + 1;add(2 * z ^ 1, 1, 1);add(1, 2 * z ^ 1, 0);}for (int i = 1; i <= a; i++) {int z = s * a + i;add(2 * z ^ 1, 1, 1);add(1, 2 * z ^ 1, 0);}for (int i = 1; i <= s; i++) {int z = i * a + a;add(2 * z ^ 1, 1, 1);add(1, 2 * z ^ 1, 0);}for (int i = 1; i <= s; i++) {for (int j = 1; j <= a; j++) {int z = i * a + j;add(2 * z, 2 * z ^ 1, 1);add(2 * z ^ 1, 2 * z, 0);if (i + 1 <= s) {int newz = (i + 1) * a + j;add(2 * z ^ 1, 2 * newz, 1);add(2 * newz, 2 * z ^ 1, 0);add(2 * newz ^ 1, 2 * z, 1);add(2 * z, 2 * newz ^ 1, 0);}if (j + 1 <= a) {int newz = i * a + j + 1;add(2 * z ^ 1, 2 * newz, 1);add(2 * newz, 2 * z ^ 1, 0);add(2 * newz ^ 1, 2 * z, 1);add(2 * z, 2 * newz ^ 1, 0);}}}for (int i = 0; i < b; i++) {int x, y, z;scanf("%d%d", &x, &y);z = x * a + y;add(0, 2 * z, 1);add(2 * z, 0, 0);}}void add(int x, int y, int f)
{u[e] = x;v[e] = y;flow[e] = f;next[e] = first[x];first[x] = e;e++;
}int bfs()
{queue<int> q;memset(d, -1, sizeof(d));q.push(0);d[0] = 0;while (!q.empty()) {int u1 = q.front();q.pop();for (int j = first[u1]; j != -1; j = next[j]) {if (flow[j] > 0 && d[v[j]] == -1) {d[v[j]] = d[u1] + 1;if (v[j] == 1)return 1;q.push(v[j]);}}}return 0;
}int dfs(int cur, int f)
{if (cur == 1 || f == 0)return f;int ans = 0;for (int j = first[cur]; j != -1; j = next[j]) {if (flow[j] > 0 && d[v[j]] == d[cur] + 1) {int t = dfs(v[j], flow[j] < f ? flow[j]:f);flow[j] -= t;flow[j ^ 1] += t;f -= t;ans += t;if (f == 0) break;}}d[cur] = -1;return ans;
}int dinic()
{int ans = 0;while (bfs()) {ans += dfs(0, INF);}if (ans == b)return 1;else return 0;
}

UVa563 - Crimewave相关推荐

  1. Crimewave UVA - 563(最大流)

    传送门:QAQ 题意:就是给你一个二维平面图,然后图上有若干个整数点,问你是否可能每个点都到达边界并且图上任意一点只能被一个点经过且经过一次. 思路:因为每个点只能经过一次,所以我们将每个点拆成两个点 ...

  2. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  3. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

最新文章

  1. C++资源之不完全导引(上)
  2. 利用Eclipse/MyEclipse 实体类生成.hbm.xml文件
  3. poj-2115 C Looooops(扩展欧几里得)
  4. ubuntu如何编辑/etc/ld.so.conf
  5. 【机器学习基础】八种应对样本不均衡的策略
  6. idea编辑器无法识别jdk
  7. samba and AD
  8. oracle全角字符转半角,Oracle 表字段全角字符轉換半角字符辦法
  9. 论文学习6-(M2DNE)Temporal Network Embedding with Micro- and Macro-dynamics
  10. HTML placeholder
  11. phoneinfo界面翻译_phone info +下载-三星验机神器phone info samsung下载v3.6.4 安卓版-西西软件下载...
  12. Jquery Uploadify插件+Servlet解决FTP多文件上传
  13. 开发smartphone应用,无法生成cab文件?
  14. 使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm
  15. rtnetlink组数量与设置
  16. 狄利克雷卷积_积性函数和狄利克雷卷积小结
  17. 扩展ACL ---王贝的学习笔记
  18. Python爬取某站上海租房图片!
  19. (六)CDA 数据分析师Level1考试新版大纲解析(自己整理)PART 6业务数据分析
  20. 如何正确理解店宝宝软件

热门文章

  1. 最大权闭合 图 讲解
  2. FreeSwitch Sip【转】
  3. Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
  4. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...
  5. python列表按照指定顺序排序-Python常见排序操作示例【字典、列表、指定元素等】...
  6. 西安python工资怎么样-python西安薪资
  7. python代码大全下载-最全Python算法实现资源汇总!
  8. python与excel结合-Python与Excel 不得不说的事情
  9. pythonis啥意思-Python基础:is和==的区别
  10. 学python需要英语基础吗-英语基础一般,如何才能学习C语言编程和Python