您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: