| ||||||||||
| 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 | |||||||||
Bellman_ford,32MS,优化中……#include<algorithm>
#include<iostream>
#include<sstream>
#include<fstream>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cctype>
#include<deque>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>
using namespace std;
const double ESP = 1e-8;
const double PI = acos(-1.0);
const double E = exp(1.0);
const int INF = (1<<31)-1;
typedef unsigned int uint;
typedef long long int64;
typedef unsigned long long uint64;
struct node
{
int x;
int y;
};
template<class Ele,class Wei> struct edge
{
Ele u;
Ele v;
Wei w;
};
#define findMax(a,x,y) (a[x]>a[y]?x:y)
#define findMin(a,x,y) (a[x]<a[y]?x:y)
#define Loop(i,n) for(int i=0;n-i>0;i++)
#define Less(a,b) ((b-a)>ESP)
#define More(a,b) ((a-b)>ESP)
#define Equl(a,b) (fabs(a-b)<ESP)
#define SIZE 300000
int n,t;
edge<int,int> a[SIZE];
int dist[SIZE]={0};
int x,y,z,tot=0;
int bellman_ford(void)
{
for(int i=1;n-i>0;i++) dist[i]=INF;
for(int i=1;n-i>0;i++)
{
bool ok=false;
for(int j=0;tot-j>0;j++)
{
if(dist[a[j].v]!=INF&&dist[a[j].u]>dist[a[j].v]+a[j].w)
{
ok=true;
dist[a[j].u]=dist[a[j].v]+a[j].w;
}
}
if(!ok) break;
}
return dist[n-1];
}
int main()
{
scanf("%d %d",&t,&n);
for(int i=0;t-i>0;i++)
{
scanf("%d %d %d",&x,&y,&z);
a[tot].u=x-1;
a[tot].v=y-1;
a[tot++].w=z;
a[tot].u=y-1;
a[tot].v=x-1;
a[tot++].w=z;
}
printf("%d\n",bellman_ford());
//system("pause");
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator