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 |
dij+手搓#include<cstdio> #include<queue> #include<algorithm> #include<cstring> #define MAX 1100000 using namespace std; int head[MAX],top; int dis[MAX],vis[MAX]; struct edge{ int from; int to; int cost; int next; }e[MAX],save[MAX]; void push_front(int from,int to,int cost) { top++; e[top].from=from; e[top].to=to; e[top].cost=cost; e[top].next=head[from]; head[from]=top; } struct Node{ int x; int cost; bool operator<(const Node &b)const { return b.cost<cost; } }temp,p,sta; void bfs(int s) { sta.x=s; sta.cost=0; memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); priority_queue<Node> que; que.push(sta); while(!que.empty()) { p=que.top(); que.pop(); if(!vis[p.x]) { vis[p.x]=1; dis[p.x]=p.cost; for(int i=head[p.x];i!=0;i=e[i].next) { temp.x=e[i].to; if(!vis[temp.x]) { temp.cost=p.cost+e[i].cost; que.push(temp); } } } } // printf("%d\n",dis[en]); } int main() { int t,q,n; while(~scanf("%d",&t)) { while(t--) { scanf("%d%d",&n,&q); for(int i=1; i<=q; i++) { int u,v,c; scanf("%d%d%d",&u,&v,&c); save[i].from=u,save[i].to=v,save[i].cost=c; } long long ans=0; ///1 top=0; memset(head,0,sizeof(head)); for(int i=1;i<=q;i++) push_front(save[i].from,save[i].to,save[i].cost); bfs(1); for(int i=1;i<=n;i++)ans+=dis[i]; ///2 top=0; memset(head,0,sizeof(head)); for(int i=1;i<=q;i++) push_front(save[i].to,save[i].from,save[i].cost); bfs(1); for(int i=1;i<=n;i++)ans+=dis[i]; /// printf("%lld\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