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
- PAT1087
- pat1087 All Roads Lead to Rome
- 【Python】Ceph的python接口
- Arrays.aslist新建的list集合不能add(),set(),remove()你知道吗?
- Java 虚拟机本质
- 浅谈struts
- Android实现机制(三)——View事件分发机制
- PAT1087
- CAsyncSocket血的教训-静态库惹的祸!
- Android Storage Access Framework(存储访问框架)
- 【LeetCode】 066. Plus One
- 一个闭包和原型继承的例子
- 掘金量化回测平台 - 1
- poj 1258
- NoSuchMethodError: redis.clients.jedis.JedisShardInfo.setTimeout(I)V
- 大型网站技术架构:核心原理与案例分析—第三章:大型网站核心架构要素