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:谁帮DD我看一下哪里错了我靠In Reply To:谁帮DD我看一下哪里错了我靠 Posted by:chending at 2009-05-27 16:16:08 > #include <iostream> > #include <cstring> > #include <queue> > using namespace std; > int T,i,j,n,m,a,b,d; > unsigned long long dijk[50010],ans,v[50010]; > bool used[50010],r; > struct point > { > int pa,dist; > point *next; > }p,*pi; > point tu[50010]; > priority_queue<point>que; > bool operator<(point p1,point p2) > { > return (dijk[p1.pa]>dijk[p2.pa]); > } > int main() > { > freopen("in.txt","r",stdin); > scanf("%d",&T); > while (T--) > { > while (!que.empty()) que.pop(); > scanf("%d%d",&n,&m); > for(i=0;i<n;i++) > scanf("%llu",&v[i]); > for(i=0;i<n;i++) > { > tu[i].pa=tu[i].dist=0; > tu[i].next=NULL; > } > while (m--) > { > scanf("%d%d%d",&a,&b,&d); > a--;b--; > pi=new point; > pi->next=tu[a].next; > pi->pa=b; > pi->dist=d; > tu[a].next=pi; > pi=new point; > pi->next=tu[b].next; > pi->pa=a; > pi->dist=d; > tu[b].next=pi; > } > for(i=0;i<n;i++) dijk[i]=1000000000000; > memset(used,false,sizeof(used)); > dijk[0]=0;p.pa=0;p.dist=0; > que.push(p); > while (!que.empty()) > { > p=que.top(); > que.pop(); > if (used[p.pa]) continue; > used[p.pa]=true; > pi=tu[p.pa].next; > while (pi) > { > if (!used[pi->pa]&&dijk[pi->pa]>dijk[p.pa]+pi->dist) > { > dijk[pi->pa]=dijk[p.pa]+pi->dist; > que.push(*pi); > } > pi=pi->next; > } > } > ans=0; > r=true; > for(i=0;i<n;i++) > if (dijk[i]==1000000000000) > { > r=false;break; > } > else ans+=dijk[i]*v[i]; > if (r) printf("%llu\n",ans); > else printf("No Answer\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