您的位置:首页 > 其它

POJ 3159 Candies

2016-08-13 11:05 267 查看
一道求最短路的题,时间卡得很紧,需要用优先队列(堆)来优化。

//
//  main.cpp
//  Richard
//
//  Created by 邵金杰 on 16/8/13.
//  Copyright © 2016年 邵金杰. All rights reserved.
//

#include<cstdio>
#include<queue>
#include<cstring>
#include<vector>
using namespace std;
int vis[30100];
int n,m;
struct node{
int k,w;
};
bool operator < (const node &p,const node &q)
{
return p.w>q.w;
}
priority_queue<node> pq;
vector<vector<node> > v;
void dijkstra()
{
memset(vis,0,sizeof(vis));
node p;
p.k=1;p.w=0;
pq.push(p);
while(!pq.empty())
{
p=pq.top();
pq.pop();
if(vis[p.k]) continue;
vis[p.k]=1;
if(p.k==n) break;
for(int i=0,j=(int)v[p.k].size();i<j;i++)
{
node q;q.k=v[p.k][i].k;
if(vis[q.k]) continue;
q.w=p.w+v[p.k][i].w;
pq.push(q);
}
}
printf("%d\n",p.w);
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
v.clear();
v.resize(n+1);
int a,b,c;
node p;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
p.k=b;p.w=c;
v[a].push_back(p);
}
dijkstra();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: