POJ 2394 Checking an Alibi(最短路)
来源:互联网 发布:ug8.0编程视频教程全集 编辑:程序博客网 时间:2024/04/20 21:10
题目连接:http://poj.org/problem?id=2394
题意:有F块土地,有的土地上有牛(可能有多头),粮仓在编号为1的土地上,问在M时间内有多少头牛可以到达粮仓,并按升序输出牛的编号。
用SPFA超时了。。。用优先队列优化的Dijkstra,
2394Accepted228K0MSC++代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;#define INS 1<<29#define N 505#define SIZE 2005#define CLR(arr,v) memset(arr,v,sizeof(arr))class short_path{public:short_path(){}void init(int m,int n){num_ed = m;num_v = n;CLR(des,0);CLR(next,0); CLR(h,0);for(int i = 0;i < N;++i)dis[i] = INS;while(!q.empty()) q.pop();}void add(int u,int v,int f){des[++pos] = v;val[pos] = f;next[pos] = h[u];h[u] = pos;}int Dijkstra(int start,vector<int> *end,int limit,bool *cow){dis[start] = 0;mid.d = start;mid.v = 0;q.push(mid);while(!q.empty()){int s = q.top().d,v = q.top().v;q.pop();for(int i = h[s]; i ;i = next[i]){int length = dis[s] + val[i];if(length < dis[ des[i] ] && length <= limit){dis[ des[i] ] = length;mid.d = des[i];mid.v = length;q.push(mid);}}}int sum_cow = 0;for(int i = 1;i <= num_v;++i){if(dis[i] <= limit){for(int j = 0;j < end[i].size();++j){if(!cow[ end[i][j] ]){sum_cow++;cow[ end[i][j] ] = true;}}}}return sum_cow;}private:int h[N],dis[N],des[SIZE],next[SIZE],val[SIZE];int pos,num_ed,num_v,res;struct Edge{int d,v;bool operator<(const Edge &ed) const{return v > ed.v;}};struct Edge mid;priority_queue<Edge> q;};class short_path sp;bool cow[105];vector<int> vec[505];int main(){int F,C,P,M;while(~scanf("%d%d%d%d",&F,&P,&C,&M)){sp.init(P,F);CLR(vec,0);CLR(cow,0);int u,v,c;for(int i = 0;i < P;++i){scanf("%d%d%d",&u,&v,&c);sp.add(u,v,c);sp.add(v,u,c);}for(int i = 1;i <= C;++i){scanf("%d",&c);vec[c].push_back(i);}int cows = sp.Dijkstra(1,vec,M,cow);printf("%d\n",cows);for(int i = 1;i <= C;++i){if(cow[i]) printf("%d\n",i);}}return 0;}
- POJ 2394 Checking an Alibi(最短路)
- POJ 2394 Checking an Alibi 简单最短路
- POJ 2394 Checking an Alibi (最短路+Dijkstra)
- poj 2394 Checking an Alibi--(Dijkstra)
- poj 2394 Checking an Alibi
- poj 2394 Checking an Alibi
- POJ2394 Checking an Alibi 最短路
- POJ Checking an Alibi
- POJ 2394 Checking an Alibi【SPFA】
- POJ2394 Checking an Alibi ——最短路
- PKU 2394---Checking an Alibi
- POJ2394,Checking an Alibi,Dijkstra单源最短路
- PKU 2394 ( Checking an Alibi )(Dijkstra 最短路径)
- Checking an Alibi(最短路径 Dijkstra)
- pku2394 Checking an Alibi
- Checking an Alibi
- poj 2394 Checking a Alibi-dijkstra
- poj 2394 Checking an Alibi(dij+h…
- Pyramids
- jh11,GW的井队,都说GW的rig比cc的rig更专业,我在这呆了两天,还没怎么感觉到。
- excel raise与offset
- ubuntu下pdf中文乱码解决
- nm用法
- POJ 2394 Checking an Alibi(最短路)
- 从Oracle中导出数据到文本文件
- web开发之界面开发流程
- ios学习--如何使得能够在itunes中的apps共享中看到document文件
- Linux逻辑卷管理LVM详解
- 如何判断mysql中数据表中是否有相关字段——20120412
- objective-c中nonatomic作用是什么?
- asp.net如何加快页面加载(一)
- Bison-Flex笔记 (转)