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 |
输入挂真的快吗?为什么TLE,希望大神指点输入挂#include"cstdio" #include"queue" #include"vector" #include"cstring" using namespace std; const int MAXN=1000005; const int INF=0x3fffffff; typedef long long LL; typedef pair<int,int> P; struct Edge{ int to,cost,next; }es[2][MAXN]; int V,E; int head[2][MAXN]; LL d[MAXN]; int Scan_d() { char ch; int res=0; while(ch=getchar()) { if(ch==' '||ch=='\n') return res; res*=10; res+=ch-'0'; } } void add_edge(int u,int v,int cost,int type) { es[type][E].to=v; es[type][E].cost=cost; es[type][E].next=head[type][u]; head[type][u]=E; } LL dijkstra(int s,int type) { for(int i=1;i<=V;i++) d[i]=INF; priority_queue<P,vector<P>,greater<P> > que; d[s]=0,que.push(P(0,s)); while(!que.empty()) { P p=que.top();que.pop(); int v=p.second; if(d[v]<p.first) continue; for(int i=head[type][v];i!=-1;i=es[type][i].next) { Edge e=es[type][i]; if(d[e.to]>d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } LL ans=0; for(int i=1;i<=V;i++) ans+=d[i]; return ans; } int main() { int T; T=Scan_d(); for(int cas=1;cas<=T;cas++) { int P,Q; P=Scan_d(),Q=Scan_d(); V=P,E=0; for(int i=1;i<=V;i++) head[0][i]=head[1][i]=-1; for(int i=0;i<Q;i++) { int u,v,co; u=Scan_d(),v=Scan_d(),co=Scan_d(); add_edge(u,v,co,0); add_edge(v,u,co,1); E++; } LL res=0; res+=dijkstra(1,0); res+=dijkstra(1,1); printf("%I64d\n",res); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator