poj2983Is the Information Reliable?——差分约束
来源:互联网 发布:手机端淘宝店招怎么做 编辑:程序博客网 时间:2024/06/05 10:13
poj2983Is the Information Reliable?:http://poj.org/problem?id=2983
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题意:给出一些信息,P代表的是精确的信息;V代表的是不精确的信息。问得到的这些信息是否是可靠的。
思路,用差分约束来做,根据题意找出约束条件:d(u)-d(v)>=1;c>=d(u)-d(v)>=c.找一下最短路(当然不需要写出最短路)
这题最终要求的说通俗点就是判断一下有没有负环……
在做的时候由于题意没有理解好,导致在建边的时候建反了,wa了n发……
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <set>#include <queue>using namespace std;#define INF 1000000007#define maxn 100000struct Edge{ int v; int w; int next;} edge[maxn * 3];int N,M,cnt = 0;int sum[maxn],head[maxn],vis[maxn],d[maxn];void Add(int u,int v,int w){ edge[cnt].v = v; edge[cnt].w = w; edge[cnt].next = head[u]; head[u] = cnt++;}bool spfa(){ memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); for(int i = 0;i <= N;i++)d[i] = INF; int top = 0; queue<int>st; st.push(0); d[0] = 0; vis[0] = 1; while(!st.empty()) { int x = st.front(); st.pop(); vis[x] = 0; for(int i = head[x];i != -1;i = edge[i].next) { if(d[edge[i].v] > d[x] + edge[i].w) { d[edge[i].v] = d[x] + edge[i].w; if(!vis[edge[i].v]) { vis[edge[i].v] = 1; st.push(edge[i].v); sum[edge[i].v]++; if(sum[edge[i].v] > N)return false; // 当入度大于顶点数说明存在负环了 } } } } return true;}int main(){// freopen("in.txt","r",stdin); int u,v,w; while(~scanf("%d%d",&N,&M)) { cnt = 0; memset(head,-1,sizeof(head)); while(M--) { char ss[10]; scanf("%s%d%d",ss,&u,&v); if(ss[0] == 'P') { scanf("%d",&w); Add(u,v,-w); // 就是在这弄反了…… Add(v,u,w); // } else Add(u,v,-1); } for(int i = 1;i <= N;i++) // 添加了超级源点,共有N+1个点了 Add(0,i,0); if(!spfa())printf("Unreliable\n"); else printf("Reliable\n"); } return 0;}
对于求最短路还是最长路,一直混淆……
题目要求最小值,求最长路,约束条件化成d(v)-d(u)>=w(u,v)的形式;
题目要求最大值,求最短路,约束条件化成d(v)-d(u)<=w(u,v)的形式。
- poj2983Is the Information Reliable?——差分约束
- poj2983Is the Information Reliable?
- poj2983——Is the Information Reliable? (差分约束系统)
- poj2983——Is the Information Reliable?(差分约束+负权环路)
- pku 2983 Is the Information Reliable?(差分约束系统)
- POJ 2983 Is the Information Reliable(差分约束系统)
- POJ--2983[Is the Information Reliable?] 差分约束
- poj 2983 差分约束Is the Information Reliable?
- poj2983(差分约束系统)Is the Information Reliable?
- poj 2983 Is the Information Reliable?(差分约束)
- POJ 2983 Is the Information Reliable? 依旧差分约束
- POJ 2983 Is the Information Reliable?(差分约束系统)
- poj 2983 Is the Information Reliable? 差分约束
- Is the Information Reliable?(差分约束)
- POJ-2983-Is the Information Reliable?(差分约束)
- poj2983--Is the Information Reliable?(差分约束)
- poj 2983 Is the Information Reliable? 差分约束
- POJ 2983 Is the Information Reliable? 差分约束
- Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.internal.LoggedErrorExcept
- HTML5 META标签 标准写法
- Servlet学习和汇总
- 百万数据查询优化
- 如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?
- poj2983Is the Information Reliable?——差分约束
- pageContext对象
- kernel boot的时候如何抓取dtsi
- mfc移植过程中丢失MSVCP100D.dll解决方法
- 常见的HTTP请求头与响应头
- Linux之awk
- Web项目同时使用Struts2和SpringMVC
- Redkale 技术详解 01 -- 双亲委托模型
- JSP脚本中的9个内置对象