hdu 1142 A Walk Through the Forest
2015-08-26 19:44
447 查看
无聊的一题
#include<iostream> #include<queue> #include<cstring> #include<vector> #define maxn 1010 #define inf 1<<30 using namespace std; int n,m; vector<int>mapp[maxn]; int vaule[maxn][maxn]; int d[maxn]; int dp[maxn]; void init() { for(int i=0;i<=n;i++) mapp[i].clear(),d[i]=inf,dp[i]=0; dp[2]=1; for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) vaule[i][j]=inf; } } void input() { for(int i=0;i<m;i++) { int x,y,z; cin>>x>>y>>z; if(vaule[x][y]==inf) { mapp[x].push_back(y); mapp[y].push_back(x); } if(z<vaule[x][y]) { vaule[x][y]=z; vaule[y][x]=z; } } } void bfs() { queue<int>q; int x,y; x=2; d[2]=0; q.push(x); while(q.size()) { int x=q.front(); q.pop(); for(int i=0;i<mapp[x].size();i++) { y=mapp[x][i]; if(d[y]>d[x]+vaule[x][y]) { d[y]=d[x]+vaule[x][y]; q.push(y); } } } //for(int i=1;i<=n;i++) cout<<d[i]<<" "; //cout<<endl; } int dfs(int x) { if(dp[x]) return dp[x]; for(int i=0;i<mapp[x].size();i++) { int y=mapp[x][i]; if(d[y]<d[x]) { dp[x]+=dfs(y); } } return dp[x]; } int main() { cin.sync_with_stdio(false); while(cin>>n>>m&&n) { init(); input(); bfs(); cout<<dfs(1)<<endl; } return 0; }
相关文章推荐
- 从BL1跳转到BL2
- DexClassLoader的使用
- Dinic
- 【POJ3264】【线段树】【维护多个值】【*4】
- Centos 部署Cobbler系统
- JVM调优总结
- 快速幂和快速乘法
- [leetcode-203]Remove Linked List Elements(c)
- LeetCode题解:Excel Sheet Column Number
- poj 2299 Ultra-QuickSort(归并排序或是bit 树+离散化皆可)
- jdbc实例
- 华为oj: 图片整理
- Linux的PXE kickstart网络自动装机
- log 工具
- Unity中Instantiate物体失效问题
- PE文件学习(三)数据目录表之资源
- A+B Problem
- ExpanableListView
- 华为机试之好友管理
- Atlassian JIRA 插件开发(二) — 插件项目框架搭建