pku2394 Checking an Alibi
2010-03-03 16:46
344 查看
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2394
题意简述:求一个点能否在规定时间到达另一点。求出所有满足条件的“另一点”。
解题思路:直接求最短路,注意这题有个trick:有重边!
代码:
题意简述:求一个点能否在规定时间到达另一点。求出所有满足条件的“另一点”。
解题思路:直接求最短路,注意这题有个trick:有重边!
代码:
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; const int Max=505; const int INF=1<<29; int g[Max][Max]; int L[Max]; bool flag[Max]; int main() { int f,p,c,m; while(scanf("%d%d%d%d",&f,&p,&c,&m)!=EOF) { for(int i=0;i<=f+1;i++) { for(int j=0;j<=f+1;j++) g[i][j]=INF; L[i]=INF; } memset(flag,0,sizeof(flag)); for(int i=1;i<=f;i++) g[i][i]=0; for(int i=1;i<=p;i++) { int s,e,v; scanf("%d%d%d",&s,&e,&v); g[s][e]=g[e][s]=min(g[e][s],v); } L[1]=0; for(int i=1;i<f;i++) { int Min=INF+1; int k; for(int j=1;j<=f;j++) if(!flag[j]&&L[j]<Min) { Min=L[j]; k=j; } flag[k]=1; for(int j=1;j<=f;j++) if(!flag[j]) L[j]=min(L[j],L[k]+g[k][j]); } memset(flag,0,sizeof(flag)); int num[102]; int ans=0; for(int i=1;i<=c;i++) { scanf("%d",&num[i]); if(L[num[i]]<=m) { ans++; flag[i]=1; } } printf("%d/n",ans); for(int i=1;i<=c;i++) if(flag[i]) printf("%d/n",i); } return 0; }
相关文章推荐
- POJ2394 Checking an Alibi ——最短路——Pku2394
- poj 2394 Checking an Alibi
- POJ 2394 Checking an Alibi (dijkstra)
- POJ2394 Checking an Alibi 基础最短路
- POJ 2394 Checking an Alibi【SPFA】
- POJ2394 Checking an Alibi【Dijkstra】
- POJ 2394 Checking an Alibi 简单最短路
- POJ 2394 Checking an Alibi (最短路+Dijkstra)
- poj 2394 Checking an Alibi
- poj 2394 Checking an Alibi--(Dijkstra)
- POJ 2394 Checking an Alibi(最短路)
- bzoj1681[Usaco2005 Mar]Checking an Alibi 不在场的证明
- POJ2394,Checking an Alibi,Dijkstra单源最短路
- 【bzoj1689】[Usaco2005 Mar]Checking an Alibi 不在场的证明
- POJ2394 Checking an Alibi ——最短路
- bzoj1681[Usaco2005 Mar]Checking an Alibi 不在场的证明
- BZOJ1681 [Usaco2005 Mar]Checking an Alibi 不在场的证明
- 【BZOJ】1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(spfa)
- poj 2394 Checking a Alibi-dijkstra
- bzoj:1681 [Usaco2005 Mar]Checking an Alibi 不在场的证明