POJ1364
来源:互联网 发布:怎么查看软件注册表 编辑:程序博客网 时间:2024/05/22 03:19
Problem: King
Description: 国王给出了一些序列和的不等式。现在问你这些不等式是不是都成立。
Solution: 这个题的描述就很郁闷,下标根本没有表达清楚。实际上就是求数列的某一段和。我们设
Code(C++):
#include <iostream>#include <string>#include <queue>using namespace std;const int M=2*100+5;const int INF=0x3f3f3f3f;typedef struct tagNode{ int to,c; int next;}Node;Node map[M];int head[M];int top,m;int I;int dis[M];int de[M];bool used[M];void add_edge(int from,int to,int c){ map[I].to=to; map[I].c=c; map[I].next=head[from]; head[from]=I++;}bool spfa(int src){ for(int i=0;i<M;i++) dis[i]=INF,de[i]=0,used[i]=false; queue<int> que; que.push(src); de[src]=1; used[src]=true; dis[src]=0; while(!que.empty()){ int pre=que.front(); que.pop(); used[pre]=false; for(int i=head[pre];i+1;i=map[i].next){ int tmp=map[i].to; if(dis[tmp]>dis[pre]+map[i].c){ dis[tmp]=dis[pre]+map[i].c; if(!used[tmp]){ used[tmp]=true; que.push(tmp); ++de[tmp]; if(de[tmp]>top+1) return false; } } } } return true;}int main(){ while(cin>>top,top) { I=0; cin>>m; int s,n,k; string tmp; for(int i=0;i<M;i++) head[i]=-1; for(int i=0;i<top+2;i++) add_edge(top+1,i,0); for(int i=0;i<m;i++){ cin>>s>>n>>tmp>>k; if(tmp=="lt") //map[s+n][s-1]=k-1; add_edge(s-1,s+n,k-1); else //map[s-1][s+n]=-k-1; add_edge(s+n,s-1,-k-1); } bool f=spfa(top+1); cout<<(f? "lamentable kingdom":"successful conspiracy")<<endl; } return 0;}
0 0
- poj1364
- POJ1364
- POJ1364 King
- poj1364(King)
- poj1364 - King
- poj1364 King
- poj1364 King
- Poj1364 King
- POJ1364 King
- 【POJ1364】King
- poj1364 King
- POJ1364 KING
- POJ1364 King
- POJ1364[king]
- poj2983&&poj1364
- poj1364 差分约束
- ZOJ1260 POJ1364 HDU1531 King
- poj1364-还是建模
- YCSB工具学习使用汇总
- 生成jar包
- 存储过程实现分页
- spark 第一个java程序
- JAVA学习总结二十四
- POJ1364
- redis 主从搭建
- Guacamole——1.实现和架构
- 动态修改QGridLayout
- 对Java异常分析的一些见解
- Python添加默认模块搜索包路径
- hdu 3374 next表,最大最小表示法模板
- V6+2C6678调试之小FPGA--S3
- 一道关于股票买卖的算法编程题