您的位置:首页 > 其它

PAT1087

2016-08-02 11:31 549 查看
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
#include<cstring>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
map <string,int> tran;
map <int,string> tran2;
int mincost=inf,num=0,hap=0;
int avghap=0;
int h[205];
int cost[205][205];
int visit[205];
int n,m;
vector <int> path,res;
void dfs(int s,int nodenum,int nodecost,int nodehap)
{
if(s==tran["ROM"])
{
if(nodecost<mincost)
{
mincost=nodecost;
num=1;
hap=nodehap;
avghap=nodehap/(nodenum);
res=path;
}
else if(nodecost==mincost)
{
num++;
if(nodehap>hap)
{
hap=nodehap;
avghap=nodehap/(nodenum);
res=path;
}
else if(nodehap==hap&&nodehap/(nodenum)>avghap)
{
avghap=nodehap/(nodenum);
res=path;
}
}
}
if(nodecost>mincost)
return;
for(int i=1;i<n;i++)
{
if(visit[i]==0&&cost[s][i]!=inf)
{
path.push_back(i);
visit[i]=1;
dfs(i,nodenum+1,nodecost+cost[s][i],nodehap+h[i]);
visit[i]=0;
path.pop_back();
}
}
}
int main()
{
string s;
cin>>n>>m>>s;
int ans=0;
memset(visit,0,sizeof visit);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
cost[i][j]=i==j?0:inf;
}
tran[s]=0;
tran2[0]=s;
h[0]=0;
for(int i=0;i<n-1;i++)
{
string name;
cin>>name>>h[i+1];
tran[name]=i+1;
tran2[i+1]=name;
}
for(int i=0;i<m;i++)
{
string a,b;
int x;
cin>>a>>b>>x;
if(cost[tran[a]][tran[b]]>x)
{
cost[tran[a]][tran[b]]=x;
cost[tran[b]][tran[a]]=x;
}
}
visit[0]=1;
path.push_back(0);
dfs(tran[s],0,0,0);
cout<<num<<' '<<mincost<<' '<<hap<<' '<<avghap<<endl;
for(int i=0;i<res.size();i++)
{
cout<<tran2[res[i]];
if(i!=res.size()-1) cout<<"->";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: