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 A B X可以转化为A-B<=X或B-A>=X
V A B,则可以转化为A-B<=-1
对于《=的差分约束题,就要用到最短路,而判断信息的可靠与否就要判断图中是否存在负权回路即环。
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 A B X可以转化为A-B<=X或B-A>=X
V A B,则可以转化为A-B<=-1
对于《=的差分约束题,就要用到最短路,而判断信息的可靠与否就要判断图中是否存在负权回路即环。
代码:
#include<iostream> #include<string.h> #define N 1005 #define M 200005 #define MAX 99999999 using namespace std; struct edge{int s,e,w; }aa[M]; int dist[N]; int n,m,tot; bool Bellman_ford() { bool flag;本来是进行n-1次松弛的,在这里我用了一些小技巧松弛了n次。 for(int i=1;i<=n;++i) { flag=true; for(int j=1;j<=tot;++j) { int temp=dist[aa[j].s]+aa[j].w; if(dist[aa[j].e]>temp) { dist[aa[j].e]=temp; flag=false; } } if(flag) return true;如果在某一次dist中的值不改变的时候,则以后不会在改变,直接还回true即可。 } return flag;而在进行第N次松弛时如果还可以松弛则说明图中存在回路,而此时flag为false。否者falg为true因此可以直接返回flag即可。 } int main() { char ch; while(cin>>n>>m) { tot=0; memset(dist,0,sizeof(dist)); for(int i=0;i<m;++i) { getchar(); cin>>ch; int a,b,c; cin>>a>>b; if(ch=='P') { cin>>c; aa[++tot].s=a; aa[tot].e=b; aa[tot].w=-c; aa[++tot].s=b; aa[tot].e=a; aa[tot].w=c; } else{ aa[++tot].s=a; aa[tot].e=b; aa[tot].w=-1; } } if(Bellman_ford()) cout<<"Reliable"<<endl; else cout<<"Unreliable"<<endl; } return 0; }