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 |
注意是从1到n而不是求所有的点。哭了,看错题目。AC代码 #include<stdio.h> #include<string.h> #include<string> #include<map> #include<queue> #include<stack> #include<algorithm> #define Max 1010 #define min(a,b) a>b?b:a; #define max(a,b) a>b?a:b; #define inf 0x3f3f3f3f using namespace std; bool vis[Max]; int dist[Max]; int max_num; //ans struct Node{ int next; int to; int dis; }edge[Max*Max]; int num_edge; int head[Max]; void add_edge(int x,int y,int w) { edge[++num_edge].next=head[x]; edge[num_edge].to=y; edge[num_edge].dis=w; head[x]=num_edge; } struct heap{ int data; int weight; }; struct cmp{ //维护最大的那条边 bool operator()(struct heap a,struct heap b) { return a.weight<b.weight; } }; priority_queue <struct heap,vector<heap>, cmp> q; void dijkstra(int num) { dist[num]=inf; while(q.size()) q.pop(); struct heap h; h.data=num; h.weight=inf; //因为最小的会影响 q.push(h); while(q.size()) { int mmax=inf,u=-1; h=q.top(); q.pop(); mmax=h.weight; u=h.data; if(vis[u]) continue; vis[u]=true; for(int i=head[u];i;i=edge[i].next) { if(edge[i].dis>dist[edge[i].to]&&mmax>dist[edge[i].to]) { dist[edge[i].to]=min(mmax,edge[i].dis); if(vis[edge[i].to]) continue; h.data=edge[i].to; h.weight=dist[edge[i].to]; q.push(h); } } } } int main() { int t,n,m,x,y,w; scanf("%d",&t); for(int k=1;k<=t;k++) { memset(head,0,sizeof(head)); memset(vis,false,sizeof(vis)); memset(dist,0,sizeof(dist)); num_edge=0; scanf("%d%d",&n,&m); while(m--) { scanf("%d%d%d",&x,&y,&w); if(y==x) continue; add_edge(x,y,w); add_edge(y,x,w); } max_num=inf; dijkstra(1); // for(int i=2;i<=n;i++) // max_num=min(max_num,dist[i]); printf("Scenario #%d:\n%d\n\n",k,dist[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