码迷,mamicode.com
首页 > 其他好文 > 详细

10099 The Tourist Guide

时间:2015-10-08 23:01:58      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出n的城市m条通道,然后每条通道最大的承载人数给出来了,然后给出起点和终点以及要搭载的人数,问最少要走多少次才能把全部游客送到目的地

因为导游每次都要跟团,所以每条交通道路搭载的最大人数要减1= =

克鲁斯卡尔算法,就会排序的时候按照运输人数的从大到小排序,然后当起点和终点在一个联通分支时即可

#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;
        else
        ans=sum/num+1;
        printf("Scenario #%d\n",++t);
        printf("Minimum Number of Trips = %d\n\n",ans);
    }
    return 0;
}

 

10099 The Tourist Guide

标签:

原文地址:http://www.cnblogs.com/NaCl/p/4862558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!