UVA 11183 Teen Girl Squad(最小树形图)

You are part of a group of n teenage girls armed with cellphones. You have some news you wantto tell everyone in the group. The problem is that no two of you are in the same room, and you mustcommunicate using only cellphones. What’s worse is that due to excessive usage, your parents haverefused to pay your cellphone bills, so you must distribute the news by calling each other in the cheapestpossible way. You will call several of your friends, they will call some of their friends, and so on untileveryone in the group hears the news.

Each of you is using a different phone service provider, and you know the price of girl A callinggirl B for all possible A and B. Not all of your friends like each other, and some of them will nevercall people they don’t like. Your job is to find the cheapest possible sequence of calls so that the newsspreads from you to all n-1 other members of the group.

Input

The first line of input gives the number of cases, N (N < 150). N test cases follow. Each one startswith two lines containing n (0 n 1000) and m (0 m 40, 000). Girls are numbered from 0 ton-1, and you are girl 0. The next m lines will each contain 3 integers, u, v and w, meaning that a callfrom girl u to girl v costs w cents (0 w 1000). No other calls are possible because of grudges,rivalries and because they are, like, lame. The input file size is around 1200 KB.

Output

For each test case, output one line containing ‘Case #x:’ followed by the cost of the cheapest methodof distributing the news. If there is no solution, print ‘Possums!’ instead. 

Sample Input

4
2
1
0 1 102

1
1 0 10
4
4
0 1 10
0 2 10
1 3 20
2 3 30
4
4
0 1 10
1 2 20
2 0 30
2 3 100

Sample Output

Case #1: 10
Case #2: Possums!
Case #3: 40
Case #4: 130

题意:

确定根的最小树形图,打一下模版就行。

根是0.


#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <string>
typedef long long LL;
using namespace std;
const int maxn = 1111;
const int maxm = 44444;
const int inf = 0x3f3f3f3f;
int n,m;
struct edge
{
    int u,v;
    int w;
}len[maxm];
int zhuliu(int root)
{
    int in[maxn];
    int pre[maxn];
    int res=0;
    while(1){
        for(int i=1;i<=n;i++) in[i]=inf;
        for(int i=1;i<=m;i++)
        {
            if(len[i].u==len[i].v) continue;
            if(in[len[i].v]>len[i].w)
            {
                pre[len[i].v]=len[i].u;
                in[len[i].v]=len[i].w;
            }
        }
        in[root]=0;
        for(int i=1;i<=n;i++) if(in[i]==inf) return -1;
        int tn=0;
        int id[maxn];
        int vis[maxn];
        memset(id,-1,sizeof id);memset(vis,-1,sizeof vis);
        for(int i=1;i<=n;i++)
        {
            res+=in[i];
            int v=i;
            while(vis[v]!=i&&id[v]==-1&&v!=root)
            {
                vis[v]=i;
                v=pre[v];
            }
            if(v!=root&&id[v]==-1)
            {
                tn++;
                for(int u=pre[v];u!=v;u=pre[u])
                {
                    id[u]=tn;
                }
                id[v]=tn;
            }
        }
        if(tn==0) break;
        for(int i=1;i<=n;i++)
        {
            if(id[i]==-1) id[i]=++tn;
        }
        for(int i=1;i<=m;)
        {
            int v=len[i].v;
            len[i].v=id[len[i].v];
            len[i].u=id[len[i].u];
            if(len[i].u!=len[i].v)
            {
                len[i++].w-=in[v];
            }
            else
                swap(len[i],len[m--]);
        }
        n=tn;
        root=id[root];
    }
    return res;
}
int main()
{
    int T;scanf("%d",&T);
    int p=0;
    while(T--)
    {
        p++;
        scanf("%d %d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            int u,v,w;scanf("%d %d %d",&u,&v,&w);
            len[i].u=u+1,len[i].v=v+1,len[i].w=w;
        }
        int ans=zhuliu(1);
        if(ans==-1) printf("Case #%d: Possums!\n",p);
        else printf("Case #%d: %d\n",p,ans);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值