10099 The Tourist Guide
生活随笔
收集整理的這篇文章主要介紹了
10099 The Tourist Guide
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:給出n的城市m條通道,然后每條通道最大的承載人數(shù)給出來了,然后給出起點和終點以及要搭載的人數(shù),問最少要走多少次才能把全部游客送到目的地
因為導游每次都要跟團,所以每條交通道路搭載的最大人數(shù)要減1= =
克魯斯卡爾算法,就會排序的時候按照運輸人數(shù)的從大到小排序,然后當起點和終點在一個聯(lián)通分支時即可
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=10000; int n,m; int p[maxn]; struct node {int u,v,num; }; bool cmp(node a,node b) {return a.num>b.num; } void init() {for(int i=1;i<=n;i++)p[i]=i; } int find(int x) {return p[x]==x ? x :find(p[x]); } node a[maxn]; int main() {int t=0;while(scanf("%d %d",&n,&m)!=EOF){if(!n&&!m) break;init();for(int i=0;i<m;i++){scanf("%d %d %d",&a[i].u,&a[i].v,&a[i].num);}sort(a,a+m,cmp);int s,e,sum;scanf("%d %d %d",&s,&e,&sum);int k=0;for(int i=0;i<m;i++){int fx=find(a[i].u);int fy=find(a[i].v);if(fx!=fy)p[fx]=fy;if(find(s)==find(e)){k=i;break;}} int num=a[k].num;num--; int ans;if(sum%num==0)ans=sum/num;elseans=sum/num+1;printf("Scenario #%d\n",++t);printf("Minimum Number of Trips = %d\n\n",ans);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/NaCl/p/9580150.html
總結(jié)
以上是生活随笔為你收集整理的10099 The Tourist Guide的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用前端代码资源(转)
- 下一篇: Udp发送