http://poj.org/problem?id=2983

题意:给出M条信息,判断这些信息的正确性。(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的距离为x。

思路:dis[i]表示i到原点的距离,由(1)知 dis[A]<=dis[B]-1 即B->A之间有一条边,权值为-1;由(2)知: dis[A]<=dis[B]-x && dis[B] <= dis[A]+x,即A->B的权值为-x,B->A的权值为x。增加一个超级源点,与所有的点相连且权值为0.建图,spfa判断是否有负环(即判断进站次数,若大于点数则存在负环)。若存在负环则信息为假,否则为真。

 #include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
const int N=;
const int INF=<<;
int head[],vis[];
int dis[N],num[];
int cnt,n; struct node
{
int u,v,w;
int next;
} edge[N];
void init()
{
cnt = ;
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
memset(num,,sizeof(num));
}
void add(int u,int v,int w)
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
}
int spfa()
{
queue<int>q;
for (int i = ; i <= n; i ++)
dis[i] = INF;
dis[] = ;
q.push();
vis[] = ;
while(!q.empty())
{
int u = q.front();
vis[u] = ;
q.pop();
for (int j = head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v;
int w = edge[j].w;
if (dis[v] > dis[u]+w)
{
dis[v] = dis[u]+w;
if (!vis[v])
{
q.push(v);
vis[v] = ;
++num[v];
if (num[v] > n)
return ;
}
}
}
}
return ;
}
int main()
{
int m,u,v,w;
char s[];
while(~scanf("%d%d",&n,&m))
{
init();
for (int i = ; i <= n; i++)
add(,i,);
for (int i = ; i < m; i++)
{
scanf("%s",s);
if (s[]=='P')
{
scanf("%d %d %d",&u,&v,&w);
add(u,v,w);
add(v,u,-w);
}
if (s[]=='V')
{
scanf("%d %d",&u,&v);
add(v,u,-);
}
}
if (spfa())
printf("Reliable\n");
else
printf("Unreliable\n");
}
return ;
}

最新文章

  1. [threeJs][新浪股票api][css3]3D新浪财经数据-最近A股涨的也太疯了......
  2. 详细解说Java Spring的JavaConfig注解 【抄】
  3. volicity 模板类,java操作配置文件
  4. ASP.NET数据绑定技术
  5. Centos7安装杀毒软件ClamAV
  6. Oracle中Left join的on和where的效率差别
  7. 【转载】Shared Configuration
  8. Apache开启expires响应头,优化缓存
  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
  10. Springdata mongodb 版本兼容 引起 Error [The &#39;cursor&#39; option is required, except for aggregate with the explain argument
  11. Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
  12. Java定时器小实例
  13. nginx limit_rate突然限速失败
  14. 字符串对象的charAt函数存在的意义
  15. express安装及使用(windows系统)
  16. Pycharm安装autopep8工具
  17. php纯原生实现数组二分法
  18. 矩阵乘法&lt;简单总结&gt;
  19. windows 7 64bit安装apche php
  20. Sails 框架学习资料

热门文章

  1. UVA-227 Puzzle(模拟)
  2. CCF201409-2 画图 java(100分)
  3. MAC上postman离线安装时提示加载扩展程序出错怎么办?
  4. 利用stylist插件,简单两步屏蔽新浪微博上的广告
  5. 利用 Python 批量修改文件名
  6. ffmpeg 视音处理
  7. list数组排序---stream
  8. FJoi2017 1月20日模拟赛 交错和(等差数列+rmq)
  9. jQuery对象是怎么创建的
  10. SQL Server memory – Internals