差分约束系统——POJ 2983
来源:互联网 发布:小微企业会计核算软件 编辑:程序博客网 时间:2024/06/06 10:07
对应POJ题目:点击打开链接
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 4P 1 2 1P 2 3 1V 1 3P 1 3 15 5V 1 2V 2 3V 3 4V 4 5V 3 5
Sample Output
UnreliableReliable
Source
题意:给出两种关于防御站位置的信息,一种是确切的信息,P A B X,表示A在B北面x距离的地方,另一种是V A B,表示只知道A在B的北面。问这些信息有没有矛盾。思路:确切信息可表示为 A - B >= X && A - B <= X,模糊信息可表示为 A - B >= 1
即是分别表示为:A - B <= X && B - A <= -X 和 B - A <= -1
建图用Bellman_Ford或Spfa都可以解决,其中前者可直接解决,后者需要加入一个超级源,使到每个点的距离为0(这样才能使每个点都走过,否则对于不连通的图,这不能)。
Spfa:
#include<cstdio>#include<cstdlib>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<algorithm>#include<cstring>#include<string>#include<iostream>const int MAXN=1000+10;const int INF=1<<30;using namespace std;int dis[MAXN];int in[MAXN];int vis[MAXN];int head[MAXN];int size,n,m;struct Edge{int v,w,next;}E[202000];void Build(int u, int v, int w){E[size].v = v;E[size].w = w;E[size].next = head[u];head[u] = size++;}int Spfa(){memset(vis,0,sizeof(vis));memset(in,0,sizeof(in));for(int i=0; i<=n; i++) dis[i] = INF;dis[0] = 0;queue<int>q;q.push(0);vis[0] = 1;while(!q.empty()){int u = q.front();vis[u] = 0;q.pop();for(int i=head[u]; i!=-1; i=E[i].next){int v = E[i].v;int w = E[i].w;if(dis[u] + w < dis[v]){dis[v] = dis[u] + w;if(!vis[v]){vis[v] = 1;in[v]++;if(in[v] >= n) return 0;q.push(v);}}}}return 1;}int main(){//freopen("in.txt","r",stdin);while(~scanf("%d%d", &n,&m)){memset(head,-1,sizeof(head));size = 0;char ch[3];int a,b,w;for(int i=0; i<m; i++){scanf("%s", ch);if(ch[0] =='P'){scanf("%d%d%d", &a,&b,&w);Build(a,b,w);Build(b,a,-w);}else{scanf("%d%d", &a,&b);Build(b,a,-1);}}for(int i=1; i<=n; i++)Build(0,i,0);//加入超级源int ok = Spfa();if(ok) printf("Reliable\n");else printf("Unreliable\n");}return 0;}
Bellman_Ford:
#include<cstdio>#include<cstdlib>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<algorithm>#include<cstring>#include<string>#include<iostream>const int MAXN=1000+10;const int INF=1<<30;using namespace std;int dis[MAXN];int size,n,m;struct Edge{int u,v,w;}E[200000];void Build(int u, int v, int w){E[size].u = u;E[size].v = v;E[size++].w = w;}int Bellman_Ford(){for(int i=1; i<=n; i++) dis[i] = INF;dis[1] = 0;for(int i=1; i<=n-1; i++){for(int j=0; j<size; j++){if(dis[E[j].u] + E[j].w < dis[E[j].v])dis[E[j].v] = dis[E[j].u] + E[j].w;}}for(int i=0; i<size; i++)if(dis[E[i].u] + E[i].w < dis[E[i].v]) return 0;return 1;}int main(){//freopen("in.txt","r",stdin);while(~scanf("%d%d", &n,&m)){size = 0;char ch[3];int a,b,w;for(int i=0; i<m; i++){scanf("%s", ch);if(ch[0] =='P'){scanf("%d%d%d", &a,&b,&w);Build(a,b,w);Build(b,a,-w);}else{scanf("%d%d", &a,&b);Build(b,a,-1);}}int ok = Bellman_Ford();if(ok) printf("Reliable\n");else printf("Unreliable\n");}return 0;}
- 差分约束系统——POJ 2983
- Poj 2983 (差分约束系统)
- poj 2983 (差分约束系统)
- POJ 2983 差分约束系统
- poj 2983 差分约束系统 题解
- 差分约束系统——POJ 1201
- 差分约束系统——POJ 1364
- poj——1275 Cashier Employment 差分约束系统
- 差分约束系统 poj
- poj 3169 BellmanFord—差分约束
- poj 2983 差分约束
- poj1201Intervals——差分约束系统
- poj3159Candies——差分约束系统
- POJ 2983 Is the Information Reliable(差分约束系统)
- poj 2983(差分约束系统,bellman)
- POJ 2983 (差分约束系统Spfa)
- POJ 2983 Is the Information Reliable?(差分约束系统)
- POJ 2983-Is the Information Reliable?(差分约束系统)
- 关于投影平面变换到viewport后多边形的失真问题
- nyoj 题目4:ASCII码排序
- 使用Busybox制作根文件系统
- Convolution Neural Network (CNN) 原理与实现
- 超越自我 勇往直前
- 差分约束系统——POJ 2983
- 使用Qemu模拟Cortex-A9运行U-boot和Linux
- 别让自己受hater的影响,坚持自己的思想!
- glib中hash table
- Java NIO系列教程(三) Buffer
- Git笔记(一)——[commit, checkout]
- 【Oracle】ORA-30553: 函数不确定的解决办法
- Jsoup学习之Whitelist类
- Android无法访问本地服务器(localhost)的解决方案