【codevs 4246】奶牛的身高 差分约束
2015-10-22 10:48
399 查看
用差分约束乱搞吧……
在那次月赛里算个水题了……
点击就送屠龙宝刀
在那次月赛里算个水题了……
点击就送屠龙宝刀
[code]#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; const int MAXN = 100000 + 5; const int MAXM = 100000 + 5; struct edge { int f,t,v; }l[MAXM * 2]; int first[MAXN],next[MAXN * 2],tot; int dis[MAXN]; bool use[MAXN]; bool in[MAXN]; void init() { memset(first,0xfff,sizeof(first)); memset(use,0,sizeof(use)); memset(dis,0,sizeof(dis)); memset(in,0,sizeof(in)); tot = 0; return; } void build(int f,int t,int v) { l[++tot] = (edge){f,t,v}; next[tot] = first[f]; first[f] = tot; return; } queue <int> q; bool bfs(int u) { while(!q.empty()) q.pop(); q.push(u); use[u] = true; while(!q.empty()) { u = q.front(); q.pop(); for(int i = first[u];i != -1;i = next[i]) { int v = l[i].t; if(use[v]) if(dis[v] != dis[u] + l[i].v) return false; dis[v] = dis[u] + l[i].v; if(!use[v]) q.push(v); use[v] = true; } } return true; } int T,n,m,f,t,v; int main() { scanf("%d",&T); while(T--) { init(); scanf("%d %d",&n,&m); for(int i = 1;i <= m;i ++) { scanf("%d %d %d",&t,&f,&v); build(f,t, v); build(t,f,-v); } for(int i = 1;i <= n;i ++) if(!bfs(i)) { puts("Bessie is blind."); goto cont; } puts("Bessie's eyes are good"); cont: continue; } return 0; }
相关文章推荐
- Vsftpd配合脚本实现目录配额
- Eclipse系列:如何断点调试web项目
- [Leetcode]Merge Sorted Array
- android开发真机调试(MAC环境下)
- linux常用命令1
- Android中事件分发机制详解
- 【Qt】条形码制作器(Code39编码)
- css2和css3中长度单位px和em,rem的定义与区别
- 经典编程笔试题1
- Linux下*.tar.gz文件解压缩命令
- JS实现判断滚动条滚到页面底部并执行事件的方法
- OC weak strong __weak __strong copy retain assign nonatomic atomic等关键字的总结
- PHP学习笔记之命名空间//待完善V1.0
- 在servlet中使用spring注解
- 我的第一篇博文
- 整合大量開源庫溫習基礎項目(一)
- 使用python对url编码解码
- Git 常用命令整理
- 整合大量開源庫溫習基礎項目(一)
- 发送邮件