博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3436 小K的农场
阅读量:5257 次
发布时间:2019-06-14

本文共 2009 字,大约阅读时间需要 6 分钟。

首先这是个查分约束系统。。。(那是啥来着←_←)

然后判断可行解的话,直接spfa判负圈。

bfs版spfa要记录每个点的进队次数,如果大于点数就代表有负圈。。。但是好慢Σ( ° △ °|||)︴

于是改用dfs版的spfa(还以为会很慢。。。,其实速度极快Orz)

 

1 /************************************************************** 2     Problem: 3436 3     User: rausen 4     Language: C++ 5     Result: Accepted 6     Time:36 ms 7     Memory:1236 kb 8 ****************************************************************/ 9  10 #include 
11 12 using namespace std;13 const int N = 10005;14 const int M = N;15 const int Maxlen = 20 * M;16 17 struct edges {18 int next, to, v;19 edges() {}20 edges(int _n, int _t, int _v) : next(_n), to(_t), v(_v) {}21 } e[M];22 23 int n, m;24 int first[N], tot;25 int d[N];26 int v[N], flag;27 char buf[Maxlen], *c = buf;28 int Len;29 30 inline int read() {31 int x = 0;32 while (*c < '0' || '9' < *c) ++c;33 while ('0' <= *c && *c <= '9')34 x = x * 10 + *c - '0', ++c;35 return x;36 }37 38 inline void add_edge(int x, int y, int z) {39 e[++tot] = edges(first[x], y, z);40 first[x] = tot;41 }42 43 void spfa(int p) {44 if (v[p]) {45 flag = 1;46 return;47 }48 int x, y;49 v[p] = 1;50 for (x = first[p]; x; x = e[x].next)51 if (d[p] + e[x].v < d[y = e[x].to]) {52 d[y] = d[p] + e[x].v;53 spfa(y);54 if (flag) return;55 }56 v[p] = 0;57 }58 59 int main() {60 Len = fread(c, 1, Maxlen, stdin);61 buf[Len] = '\0';62 int i, oper, x, y, z;63 n = read(), m = read();64 for (i = 1; i <= m; ++i) {65 oper = read(), x = read(), y = read();66 if (oper == 3) add_edge(x, y, 0);67 else {68 z = read();69 if (oper == 1) add_edge(x, y, -z);70 else add_edge(y, x, z);71 }72 }73 for (i = 1; i <= n; ++i) {74 spfa(i);75 if (flag) break;76 }77 puts(flag ? "No" : "Yes");78 return 0;79 }
View Code

 

转载于:https://www.cnblogs.com/rausen/p/4133411.html

你可能感兴趣的文章
多态存在的3个必要条件
查看>>
code First 四
查看>>
Django与Ajax
查看>>
再做一题,2013-6-16更新
查看>>
Oracle_Statspack性能诊断工具
查看>>
面向对象(封装、继承、多态、抽象)
查看>>
Memcached数据库缓存
查看>>
转获取sql维护的表关系
查看>>
网络基础——TCP/IP五层模型
查看>>
HDU-3018 Ant Trip(欧拉回路)
查看>>
Codeforces Round #215 (Div. 1) B. Sereja ans Anagrams 匹配
查看>>
CDOJ 1251 谕神的密码 贪心
查看>>
CMYK列印颜色
查看>>
matplotlib 进阶之Tight Layout guide
查看>>
多线程 测试
查看>>
web提前做好测试
查看>>
tp5.1 本地正常, 线上route.php不起作用的问题
查看>>
[笔记] 斯特林公式
查看>>
opencv删除轮廓
查看>>
简谈【自动化协议逆向工程技术的当前趋势】
查看>>