1003 Emergency (25)
2013-11-12 16:22
615 查看
1003 Emergency (25)
该问题的基本思想是通过dijkstra算法求得所有的最短路径,再遍历所有最短路径获得可以聚集的最多人数。
该问题的基本思想是通过dijkstra算法求得所有的最短路径,再遍历所有最短路径获得可以聚集的最多人数。
#include <iostream> #include <vector> using namespace std; class CA { public: enum{N=500,INF=0x6FFFFFFF}; void run(); void getshortestlen(); void getmaxhands(int k,int curhands); private: int n,m,sv,dv; int hands ; int dist ; int shortestlen,shortestpathnum,maxhands; vector<int> posipath ; }; void CA::getmaxhands(int k,int curhands) { if(k==sv) { shortestpathnum++; if(curhands+hands[k]>maxhands) maxhands=curhands+hands[k]; } int i; for(i=0;i<posipath[k].size();i++) { getmaxhands(posipath[k][i],curhands+hands[k]); } } void CA::getshortestlen() { shortestlen=-1; bool visited ; int d ; fill_n(visited,n,false); int i; for(i=0;i<n;i++) d[i]=dist[sv][i]; d[sv]=0; while(1) { int k=-1; for(i=0;i<n;i++) { if(visited[i]) continue; if(k==-1||d[i]<d[k]) k=i; } if(k==-1) break; if(k==dv) { shortestlen=d[k]; break; } visited[k]=true; for(i=0;i<n;i++) { if(visited[i]) continue; if(d[i]>d[k]+dist[k][i]) { d[i]=d[k]+dist[k][i]; posipath[i].clear(); posipath[i].push_back(k); } else if(d[i]==d[k]+dist[k][i]) { posipath[i].push_back(k); } } } } void CA::run() { shortestpathnum=0; maxhands=0; int i,v1,v2,w; cin>>n>>m>>sv>>dv; for(i=0;i<n;i++) cin>>hands[i]; fill_n((int*)dist,N*N,INF); for(i=0;i<m;i++) { cin>>v1>>v2>>w; dist[v1][v2]=w; dist[v2][v1]=w; } getshortestlen(); getmaxhands(dv,0); printf("%d %d\n",shortestpathnum,maxhands); } int main() { //freopen("test.in","r",stdin); CA *a=new CA; a->run(); return 0; }
相关文章推荐
- 1003. Emergency (25)(C++)
- 1003 Emergency (25)
- 1003. Emergency (25)
- PAT 1003 Emergency (25)
- PAT1003. Emergency (25)
- Pat 1003 Emergency (25)
- PAT 1003 Emergency(25)Python
- 1003 Emergency (25)
- 1003. Emergency (25)【Dijkstra or DFS】
- pat甲级_路径问题(例题:pat 1003 Emergency (25))
- PAT (Advanced Level) Practise 1003 Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)-PAT
- PAT 甲级试题1003 Emergency (25) dijkstra变形应用
- patest_1003_Emergency (25)_(dijkstra+dfs)
- PAT-1003 Emergency (25)
- PAT1003. Emergency (25) Dijkstra
- PAT1003. Emergency (25)
- 1003 Emergency (25)
- pat 甲级 1003 Emergency