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 |
求助所有数据都查了,范围也够了,双边也加了,就是WA! #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<memory.h> using namespace std; #define Maxn 1600090 #define Inf 2000000000 #define FILL(a,h) memset(a,(h),sizeof(a)) #define FOR(i,l,r) for(int i=l;i<=r;i++) typedef long long LL; typedef unsigned long long ULL; struct node1{int v,next;LL w;}g[Maxn*3]; int T,n,m,cnt,W[Maxn],p[Maxn]; LL dis[Maxn]; bool vis[Maxn]; inline void addEdge(int u,int v,ULL c){ g[cnt].v=u,g[cnt].w=c,g[cnt].next=p[v],p[v]=cnt++; } void SPFA(void){ FOR(i,1,n)dis[i]=Inf; dis[1]=0; FILL(vis,0); vis[1]=true; queue<LL> q; q.push(1); while(!q.empty()){ int now=q.front(); q.pop(); vis[now]=0; for(int e=p[now];e!=-1;e=g[e].next){ if(dis[g[e].v]>dis[now]+g[e].w){ dis[g[e].v]=dis[now]+g[e].w; if(!vis[g[e].v]){q.push(g[e].v);vis[g[e].v]=true;} } } } } int main(int argc,char**argv){ for(scanf("%d",&T);T--;){ int u,v,c; FILL(p,-1); cnt=0; scanf("%d%d",&n,&m); FOR(i,1,n)scanf("%d",&W[i]); FOR(i,1,m){ scanf("%d%d%I64u",&u,&v,&c); addEdge(u,v,c); addEdge(v,u,c); } SPFA(); //FOR(i,1,n)printf("%d %d %d %d\n",i,p[i],W[i],dis[i]); ULL ans=0,flag=0; FOR(i,1,n){ ans+=W[i]*dis[i]; if (dis[i]==Inf){flag=true;break;} } if(flag)printf("No Answer\n");else printf("%I64u\n",ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator