| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
谁看谁茫然POJ2983
大家对比一下一个AC和一个RE了得代码,不信可以试试(C语言)
其中四行让我莫名其妙
d[l[index].v]=d[l[index].u]+l[index].w;//这一行与下三行
if(d[l[index].v]>d[l[index].u]+l[index].w){
printf("%d",1/(i-i));//这三行与上一行
}
(去掉后三行是个AC得,加了是个RE得,这头两行真让我莫名其妙)
从AC到RE只需加刚才那三行代码,在其中我标了注释给大家指出的
这是AC得
#include <stdio.h>
#include <stdlib.h>
struct stct0{
int u,v;
long w;
}l[200010];
int n;
long m;
int q[1100],inq[1001],reti[1001];
long d[1001],adjg[1001][1000];
main(){
char typch;
int i,a,b,head,tail,flag;
long j,c,index;
while(scanf("%d%ld",&n,&m)!=EOF){
for(i=1;i<=n;i++){
q[i-1]=i;
adjg[i][0]=0;
inq[i]=1;
reti[i]=0;
d[i]=0;
}//init
j=0;
while(m--){
getchar();
scanf("%c",&typch);
if(typch=='P'){
scanf("%d%d%ld",&a,&b,&c);
l[j].v=a;
l[j].u=b;
l[j].w=-c;
adjg[b][0]++;
adjg[b][adjg[b][0]]=j;
j++;
l[j].v=b;
l[j].u=a;
l[j].w=c;
adjg[a][0]++;
adjg[a][adjg[a][0]]=j;
j++;
}else{
scanf("%d%d",&a,&b);
l[j].v=a;
l[j].u=b;
l[j].w=-1;
adjg[b][0]++;
adjg[b][adjg[b][0]]=j;
j++;
}
}
head=0;
tail=n;
flag=1;
while(head!=tail&&flag){
for(i=adjg[q[head]][0];i>=1;i--){
index=adjg[q[head]][i];
if(d[l[index].v]>d[l[index].u]+l[index].w){
reti[l[index].v]++;
d[l[index].v]=d[l[index].u]+l[index].w;//这一行与下三行
//就下面3行,请对比一下上一行与下三行
//if(d[l[index].v]>d[l[index].u]+l[index].w){
//printf("%d",1/(i-i));//这三行与上一行
//}
//上面三行
if(!inq[l[index].v]){
q[tail]=l[index].v;
inq[l[index].v]=1;
tail++;
tail%=1100;
}
if(reti[l[index].v]==n){
flag=0;
break;
}//negative circle occured
}//relax & time
}
inq[q[head]]=0;
/*
for(i=adjg[q[head]][0];i>=1;i--){
index=adjg[q[head]][i];
if(d[l[index].v]>d[l[index].u]+l[index].w){
printf("%d",1/(i-i));
}
}
*/
head++;
head%=1100;
}
if(flag){
for(i=1;i<=n;i++){
for(j=adjg[i][0];j>=1;j--){
if(d[l[adjg[i][j]].v]>d[l[adjg[i][j]].u]+l[adjg[i][j]].w){
//if(!inq[d[l[adjg[i][j]].u]]){
//printf("%d",1/(i-i));
//}
flag=0;
break;
}
}
if(!flag)
break;
}
}
if(flag)
printf("Reliable\n");
else
printf("Unreliable\n");
}
return 0;
}
RE得,就加那三行
#include <stdio.h>
#include <stdlib.h>
struct stct0{
int u,v;
long w;
}l[200010];
int n;
long m;
int q[1100],inq[1001],reti[1001];
long d[1001],adjg[1001][1000];
main(){
char typch;
int i,a,b,head,tail,flag;
long j,c,index;
while(scanf("%d%ld",&n,&m)!=EOF){
for(i=1;i<=n;i++){
q[i-1]=i;
adjg[i][0]=0;
inq[i]=1;
reti[i]=0;
d[i]=0;
}//init
j=0;
while(m--){
getchar();
scanf("%c",&typch);
if(typch=='P'){
scanf("%d%d%ld",&a,&b,&c);
l[j].v=a;
l[j].u=b;
l[j].w=-c;
adjg[b][0]++;
adjg[b][adjg[b][0]]=j;
j++;
l[j].v=b;
l[j].u=a;
l[j].w=c;
adjg[a][0]++;
adjg[a][adjg[a][0]]=j;
j++;
}else{
scanf("%d%d",&a,&b);
l[j].v=a;
l[j].u=b;
l[j].w=-1;
adjg[b][0]++;
adjg[b][adjg[b][0]]=j;
j++;
}
}
head=0;
tail=n;
flag=1;
while(head!=tail&&flag){
for(i=adjg[q[head]][0];i>=1;i--){
index=adjg[q[head]][i];
if(d[l[index].v]>d[l[index].u]+l[index].w){
reti[l[index].v]++;
d[l[index].v]=d[l[index].u]+l[index].w;
//,
if(d[l[index].v]>d[l[index].u]+l[index].w){
printf("%d",1/(i-i));
}
if(!inq[l[index].v]){
q[tail]=l[index].v;
inq[l[index].v]=1;
tail++;
tail%=1100;
}
if(reti[l[index].v]==n){
flag=0;
break;
}//negative circle occured
}//relax & time
}
inq[q[head]]=0;
/*
for(i=adjg[q[head]][0];i>=1;i--){
index=adjg[q[head]][i];
if(d[l[index].v]>d[l[index].u]+l[index].w){
printf("%d",1/(i-i));
}
}
*/
head++;
head%=1100;
}
if(flag){
for(i=1;i<=n;i++){
for(j=adjg[i][0];j>=1;j--){
if(d[l[adjg[i][j]].v]>d[l[adjg[i][j]].u]+l[adjg[i][j]].w){
//if(!inq[d[l[adjg[i][j]].u]]){
//printf("%d",1/(i-i));
//}
flag=0;
break;
}
}
if(!flag)
break;
}
}
if(flag)
printf("Reliable\n");
else
printf("Unreliable\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator