poj2983 Is the Information Reliable?

来源:互联网 发布:关我屁事 关你屁事知乎 编辑:程序博客网 时间:2024/04/28 17:07

题中的条件可以整理为两种:A-B=X  ,A>B;  即 A-B>=X ,A-B<=X ,A>=B+1;

即为:B<=A-X , A<=B+X , B<=A-1 .这是三个需要满足的条件,那么松弛条件就是 B>A-X , A>B+X , B>A-1 .

类比与dis[v]>dis[u]+w,所以建立的边为edge(A,B,-X),edge(B,A,X),edge(A,B,-1);


因为选择的松弛条件是dis[v]>dis[u]+w,所以如果图中有负权环,就代表关系循环矛盾,就是不可靠,否则就是可靠。

而用spfa判环的话,要考虑的一种情况就是图不连通,而其中一个连通分量中存在负权环,那你如果选择另一个不存在负权环的连通分量中的一个点作为起点,则负权环就不可达,就找不到负权环,所以添加一个超级源点0,对每一个点i建立单向边edge(0,i,0),以这个超级源点作为起点,就能保证每一个连通分量可达,而且不怕坏原有的约束关系。但是不能建立双向边,如果对于每条边都有edge(0,i,0)和edge(i,0,0),则对于原本的A,B就有edge(A,0,0)和edge(0,B,0),相当于AB多了一条路径,就破坏了原来AB的关系。


#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<cstring>#include<map>#include<string>#define LL long long#define clean(a) memset(a,0,sizeof(a))#define maxn 1100using namespace std;struct node{int v,w;};typedef vector<node>vec;vector<vec>head(maxn);int outque[maxn],dis[maxn];bool inque[maxn];int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<=n;++i)head[i].clear();for(int i=0;i<m;++i){char op[10];int a,b,w;scanf("%s",op);if(op[0]=='P'){scanf("%d%d%d",&a,&b,&w);head[a].push_back({b,-w});head[b].push_back({a,w});}else{scanf("%d%d",&a,&b);head[a].push_back({b,-1});}}//用spfa判环一定要使图连通,否则添加一个源点,建立源点到各点的通路,//不能从1~n中选一个作为源点加边,给已有的点加边就是破坏约束条件。for(int i=1;i<n;++i){head[0].push_back({i,0});//单向边,保证原图中不连通的点对仍然不连通//head[i].push_back({0,0});  加上就错了啊,会破坏约束条件,如果原图A,B不连通,就会多出来一条A到B代价为0的条件;}memset(inque,false,sizeof(inque));memset(dis,0x3f,sizeof(dis));memset(outque,0,sizeof(outque));queue<int>que;que.push(0);inque[0]=true;dis[0]=0;bool flag=true;while(!que.empty()){int u=que.front();que.pop();inque[u]=false;outque[u]++;if(outque[u]>n){flag=false;break;}vector<node>& ve=head[u];for(int i=0,len=ve.size();i <len;++i){int v=ve[i].v;int w=ve[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!inque[v])que.push(v);}}}if(flag)printf("Reliable\n");elseprintf("Unreliable\n");}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳朵冻的红肿了怎么办 吃螃蟹吃柿子了怎么办 吃了螃蟹和柿子怎么办 螃蟹与柿子同吃怎么办 手被鞭炮炸伤了怎么办 索尼l36h变砖了怎么办 oppor9s手机忘记解锁图案怎么办 索尼z5刷死机了怎么办 魅蓝note3被锁定怎么办 oppo图案锁忘了怎么办 手机图案锁忘w怎么办输 手机图案解锁密码忘了怎么办 忘记htc手机锁屏怎么办 我手机密码忘了怎么办 小米5x忘记密码怎么办 oppo忘记手机解锁图案怎么办 手机解锁图案忘了怎么办 苹果id给锁了怎么办 苹果手机忘了ld怎么办 4s忘记开机密码怎么办 取卵22个肚子胀怎么办 夜神模拟器很卡怎么办 夜神模拟器卡顿怎么办 入职体检有痔疮怎么办 泰迪鼻子干怎么办恢复 泰迪幼犬鼻子干怎么办 狗狗呕吐没精神怎么办 狗狗鼻子干拉稀怎么办 狗狗鼻子干呕吐怎么办 肛门直肠环断了怎么办 原房主欠取暖费怎么办 澳门赢了几千万怎么办 被海鲜骗局骗了怎么办 将军令没电了怎么办 将军令没有电了怎么办 在香港超过7天怎么办 肩膀上的灯灭了怎么办 辐射4地上有辐射怎么办 微课视频太大了怎么办 苹果手机指纹坏了怎么办 斗鱼初级酬勤怎么办