POJ_2983_Is the Information Reliable? _差分约束
2016-04-26 09:46
381 查看
Is the Information Reliable?
Time Limit: 3000MS Memory Limit: 131072K
Total Submissions: 12466 Accepted: 3924
Description
The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 years ago. Draco established a line of defense called Grot. Grot is a straight line with N defense stations. Because of the cooperation of the stations, Zibu’s Marine Glory cannot
march any further but stay outside the line.
A mystery Information Group X benefits form selling information to both sides of the war. Today you the administrator of Zibu’s Intelligence Department got a piece of information about Grot’s defense stations’ arrangement from Information Group X. Your task
is to determine whether the information is reliable.
The information consists of M tips. Each tip is either precise or vague.
Precise tip is in the form of P A B X, means defense station A is X light-years north of defense station B.
Vague tip is in the form of V A B, means defense station A is in the north of defense station B, at least 1 light-year, but the precise distance is unknown.
Input
There are several test cases in the input. Each test case starts with two integers N (0 < N ≤ 1000)
and M (1 ≤ M ≤ 100000).The next M line each describe a tip, either in precise form or vague form.
Output
Output one line for each test case in the input. Output “Reliable” if It is possible to arrange N
defense stations satisfying all the M tips, otherwise output “Unreliable”.
Sample Input
3 4
P 1 2 1
P 2 3 1
V 1 3
P 1 3 1
5 5
V 1 2
V 2 3
V 3 4
V 4 5
V 3 5
Sample Output
Unreliable
Reliable
题意:
P u v w 表示 v在u以北w公里。
V u v 表示 v在u北边,最少1公里,问所有条件可不可以全部满足。
思路:
由P 可以得到 v - u = w 也就是u - v <= w && v - u <= -w ,
由 V u v 得到 v - u >= 1 也就是 u - v <= -1 ;
建图,使用最短路,判断是否会有负环。
Time Limit: 3000MS Memory Limit: 131072K
Total Submissions: 12466 Accepted: 3924
Description
The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 years ago. Draco established a line of defense called Grot. Grot is a straight line with N defense stations. Because of the cooperation of the stations, Zibu’s Marine Glory cannot
march any further but stay outside the line.
A mystery Information Group X benefits form selling information to both sides of the war. Today you the administrator of Zibu’s Intelligence Department got a piece of information about Grot’s defense stations’ arrangement from Information Group X. Your task
is to determine whether the information is reliable.
The information consists of M tips. Each tip is either precise or vague.
Precise tip is in the form of P A B X, means defense station A is X light-years north of defense station B.
Vague tip is in the form of V A B, means defense station A is in the north of defense station B, at least 1 light-year, but the precise distance is unknown.
Input
There are several test cases in the input. Each test case starts with two integers N (0 < N ≤ 1000)
and M (1 ≤ M ≤ 100000).The next M line each describe a tip, either in precise form or vague form.
Output
Output one line for each test case in the input. Output “Reliable” if It is possible to arrange N
defense stations satisfying all the M tips, otherwise output “Unreliable”.
Sample Input
3 4
P 1 2 1
P 2 3 1
V 1 3
P 1 3 1
5 5
V 1 2
V 2 3
V 3 4
V 4 5
V 3 5
Sample Output
Unreliable
Reliable
题意:
P u v w 表示 v在u以北w公里。
V u v 表示 v在u北边,最少1公里,问所有条件可不可以全部满足。
思路:
由P 可以得到 v - u = w 也就是u - v <= w && v - u <= -w ,
由 V u v 得到 v - u >= 1 也就是 u - v <= -1 ;
建图,使用最短路,判断是否会有负环。
#include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #define inf 0x3f3f3f3f using namespace std; struct Node { int v; int w; int next; }s[210000]; int head[1010]; int dist[1010]; bool vis[1010]; int n,m,num; int coun[1010]; void add_edge(int a,int b,int c) { s[num].v = b; s[num].w = c; s[num].next = head[a]; head[a] = num++; } int SPFA() { queue<int> Q; memset(dist,inf,sizeof(dist)); memset(vis,false,sizeof(vis)); memset(coun,0,sizeof(coun)); dist[0] = 0; vis[0] = true; coun[0] = 1; Q.push(0); while(!Q.empty()) { int u = Q.front(); Q.pop(); vis[u] = false; coun[u]++; if(coun[u]>n) { return 0; } for(int i=head[u];i!=-1;i=s[i].next) { int v = s[i].v; int w = s[i].w; if(dist[v]>dist[u]+w) { dist[v] = dist[u] + w; if(!vis[v]) { vis[v] = true; Q.push(v); } } } } return 1; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { num = 0; int i,j; char c[2]; int u,v,w; memset(head,-1,sizeof(head)); while(m--) { scanf("%s",c); if(c[0]=='P') { scanf("%d%d%d",&u,&v,&w); add_edge(v,u,w); add_edge(u,v,-w); } else { scanf("%d%d",&u,&v); add_edge(u,v,-1); } } for(i=1;i<=n;i++) { add_edge(0,i,0); //找一个超级源点,给所有点都有关系,权值为0 } if(SPFA()) { printf("Reliable\n"); } else { printf("Unreliable\n"); } } return 0; }
相关文章推荐
- Delphi COM编程技术二(COM接口和COM组件)
- postgresql在windows7环境下的热备hot standby
- gradle构建相关信息
- 20145334实验三《敏捷开发与XP实践》
- SDL第一个程序:加载一张图片
- node express创建项目
- tomcat启动报错Error listenerStart
- 取近似值(最easy的做法)
- nginx同一iP多域名配置方法
- 一个频域语音降噪算法实现及改进方法
- 关于优化C++的小知识
- [Interactive Python] Rock-paper-scissors-lizard-Spock 游戏 Mini-project #1
- SVN常用命令
- MULE ESB webservice jms服务
- linq join on 多条件
- 部署Cube报错,用户登录失败;280000
- SDL简介(网络汇总)
- 【bzoj4059】【Cerc2012】【Non-boring sequences】【分治】
- [Dubbo日记](2)Dubbo-admin安装
- 算法基础 - 非递归使用栈遍历树