poj2983 Is the Information Reliable

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

这个题确实不错啊。学会了一种新的处理方法。就是A-B=W时,要转换成两个不等式——A-B>=W&&A-B<=W,再进一步转换成差分约束的形式。

就是提交老是RE啊,搞不懂啊。改了很多觉得可能错误的细节,最后都不知道自己再改什么了。然后又莫名其妙AC了。然后再拿之前的代码提交都能AC了。

55555~可能我提交次数太多了,它可怜我了吧,怎么这么悲剧啊~~~

一直在水~~~~~~~~~~~~

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#define MAXE 400005
#define MAXN 2010
using namespace std;
int dist[MAXN];
int cnt;
struct Edge
{
   int u;
   int to;
   int w;
   int next;
}edge[MAXE];

void add(int u,int v,int w)
{
	edge[cnt].u=u;
    edge[cnt].to=v;
	edge[cnt++].w=w;
}

int BellmanFord(int n)
{
	int i,j,tag;
     for(i=1;i<=n;i++) //这里初始化我还不是很懂,貌似存在负权时最好都为0比较正确,也不要INF了
		 dist[i]=0;
	
	 for(j=1;j<=n;j++)  //进行N次循环,包括了最后一次的负环判断
	 {
		 tag=0;
        for(i=0;i<cnt;i++)
		   if(dist[edge[i].to]>dist[edge[i].u]+edge[i].w)
		   {
		       dist[edge[i].to]=dist[edge[i].u]+edge[i].w;
			   tag=1;
		   }
		if(!tag)
			break;
	 }
	 return tag;
}
int main()
{
   int n,m;
   int a,b,c,i;
   char info[3];
   while(scanf("%d%d",&n,&m)!=EOF)
   {
	   cnt=0;
	   for(i=0;i<m;i++)
	   {
		   //getchar();
	      scanf("%s",info);
		  if(info[0]=='P')
		  {
			  scanf("%d%d%d",&a,&b,&c);
			  add(b,a,c);
			  add(a,b,-c);
		  }
		  else
		  {
		     scanf("%d%d",&a,&b);
			 add(a,b,-1);
		  }
		       
	   }
	   if(BellmanFord(n))
		   printf("Unreliable\n");
	   else
		   printf("Reliable\n");
   }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值