| ||||||||||
| 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 | |||||||||
终于AC了!!!附代码!如果大家能给意见,在下感激不尽!本人很菜,看讨论里说的算法都不太明白...把代码贴出来不是觉得自己算法好,而是希望有人可以告诉我应该怎么用讨论里说的spfa或者bellman-ford算法.谢谢各位的指正!!
#include<iostream>
using namespace std;
#define max_n 9999999
int d[6000],sp[20000];
int count,n;
bool flag;
struct edge
{
int l,r,t;
}e[6000];
bool search(int v)
{
int i,j,k,t=0,temp=-1;
bool jud;
for(i=0;i<v;i++)
d[i]=max_n;
d[1]=0;
for(;;)
{
jud=false;
for(j=0;j<v;j++)
{
if(d[e[j].r]>d[e[j].l]+e[j].t)
{
d[e[j].r]=d[e[j].l]+e[j].t;jud=true;
}
}
if(d[1]<0)
return true;
if(!jud)
return false;
}
return false;
}
int main()
{
int w,m,f,i,j;
//freopen("d:\\1.txt","r",stdin);
cin >> f;
while(f--)
{
cin >> n >> m >> w;j=0;
for(i=0;i<m;i++)
{
cin >> e[j].l >> e[j].r >> e[j].t;j++;
e[j].l=e[j-1].r;e[j].r=e[j-1].l;e[j].t=e[j-1].t;j++;
}
for(i=0;i<w;i++)
{
cin >> e[j].l >> e[j].r >> e[j].t;
e[j].t=-e[j].t;j++;
}
flag=search(j);
if(flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator