PAT1087

来源:互联网 发布:怎么ping服务器端口 编辑:程序博客网 时间:2024/05/24 06:37
#include<cstdio>#include<iostream>#include<string> #include<map>#include<cstring> #include<vector>using namespace std;#define inf 0x3f3f3f3fmap <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;}

1 0
原创粉丝点击