| ||||||||||
| 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 | |||||||||
Re:求大神指点,为什么WA?In Reply To:求大神指点,为什么WA? Posted by:11408400134 at 2013-03-15 22:04:43 > #include <iostream>
> #include <stdlib.h>
> #include <math.h>
> #include <string.h>
> #include <vector>
> #include <queue>
> #define MAXV 1000006
> #define INF 0xfffffff
> using namespace std;
>
> struct edge{
> int val;
> int to;
> };
>
> vector <edge> e[MAXV];
> int dist[MAXV];
> queue <int> buff;
> bool visit[MAXV];
> int E,V;
> int a[MAXV],b[MAXV],l[MAXV];
>
> void spfa( const int st )
> {
> for( int i=1 ; i<=V ; i++ ){
> dist[i] = INF;
> if( i == st )
> dist[i] = 0;
> visit[i] = false;
> }
> visit[st] = true;
> buff.push( st );
> visit[st] = true;
> while( !buff.empty() ){
> int tmp = buff.front();
> for( int i=0 ; i<(int)e[tmp].size() ; i++ ){
> edge *t = &e[tmp][i];
> if( dist[tmp] + t->to < dist[t->to] ){
> dist[t->to] = dist[tmp] + t->val;
> if( !visit[t->to] ){
> buff.push( t->to );
> visit[t->to] = true;
>
> }
> }
> visit[tmp] = false;
> buff.pop();
> }
> }
>
>
> int main( )
> {
> int cas;
> scanf("%d",&cas);
> while( cas-- ){
> scanf("%d%d",&V,&E);
> for( int i=0 ; i<E ; i++ ){
> scanf("%d%d%d",&a[i],&b[i],&l[i]);
> edge tmp;
> tmp.val = l[i];
> tmp.to = b[i];
> e[ a[i] ].push_back( tmp );
> }
> long long ans = 0 ;
> spfa( 1 );
> for( int i=1 ; i<=V ; i++ )
> ans += dist[i];
> for( int i=1 ; i<=V ; i++ )
> e[i].clear();
> for( int i=0 ; i<E ; i++ ){
> edge tmp;
> tmp.val = l[i];
> tmp.to = a[i];
> e[ b[i] ].push_back( tmp );
> }
> spfa( 1 );
> for( int i=1 ; i<=V ; i++ )
> ans += dist[i];
> for( int i=1 ; i<=V ; i++ )
> e[i].clear();
> printf("%ld\n",ans);
> }
> //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