第四届华中区程序设计邀请赛暨武汉大学第十三届校赛 网络预选赛 Problem 1566 - C - Spanning Tree

Description

You are given a graph with N nodes and M edges.
Then every time you are required to add an additional edge with weight Wi connecting the node Ai and Bi in the graph, and then calculate the sum of the edges’
weight of the Minimum Spanning Tree of the current graph. You’ll be asked to complete the mission for Q times.
The Minimum Spanning Tree of a graph is defined to be a set of N - 1 edges which connects all the N nodes of the graph and the sum of all the edges is as small as possible.
It‘s guaranteed that the graph is connected.

Input

First line of each case contains three numbers N , M and Q.(1?≤??N,Q ≤?1000, 1?≤??M?≤?100000 ,)

The following M lines contains three numbers Ai , Bi and Wi.( 1?≤??Ai, Bi?≤?1000, 1?≤??Wi≤?100000).

The last Q lines of this case contains three numbers Ai , Bi and Wi. ( 1 <= Ai, Bi <= 1000, 1?≤??Wi≤?100000 ).

Output

Output the answer in a single line for each case.

Sample Input

3 3 3

2 1 8

3 1 4

1 2 6

1 2 4

2 3 1

1 1 4

3 3 3

2 1 7

3 2 8

3 3 6

1 3 3

2 2 3

2 2 3

Sample Output

8

5

5

10

10

10

用STL的vector容器写,直接内部排序了。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define PI acos(-1.0)
#define M 1000005  //10^6
#define eps 1e-8
#define LL long long
#define moo 1000000007
#define INF 9999999999
using namespace std;
#define maxm 100000+500
#define maxn 100000+500

struct Edge
{
    int u,v,w;
    bool operator <(const Edge &rhs) const
    {
        return w<rhs.w;
    }
    void read()
    {
        scanf("%d %d %d",&u,&v,&w);
    }

}edge[maxm];

vector<Edge> res;

int fa[maxm];

int findfa(int x)
{
    if(x==fa[x])
    return x;
    return fa[x]=findfa(fa[x]);
}

bool same(int a,int b)
{
    return findfa(a)==findfa(b);
}

void merge(int a,int b)
{

    int xx=findfa(a);
    int yy=findfa(b);
    if(xx>yy)
    fa[xx]=yy;
    else
    fa[yy]=xx;

}

int kruscal(vector<Edge> &e,int n)
{
    for(int i=1;i<=n;i++)
    fa[i]=i;

    vector<Edge>res;

    sort(e.begin(),e.end());
    int ans=0;

    for(int i=0;i<e.size();i++)
    {
        if(same(e[i].u,e[i].v))
        continue;

        merge(e[i].u,e[i].v);
        ans+=e[i].w;
        res.push_back(e[i]);
    }
    e=res;
    return ans;

}

int main()
{
    int m,n,q;
    while(~scanf("%d %d %d",&n,&m,&q))
    {

        for(int i=0;i<m;i++)
        edge[i].read();

        edge[m++].read();
        sort(edge,edge+m);
        res.clear();

        for(int i=1;i<=n;i++)
        fa[i]=i;

        int ans=0;

        for(int i=0;i<m;i++)
        {
            if(same(edge[i].u,edge[i].v))
            continue;

            merge(edge[i].u,edge[i].v);
            ans+=edge[i].w;
            res.push_back(edge[i]);
        }

        q--;
        printf("%d\n",ans);

        while(q--)
        {
            int u,v,w;
            scanf("%d %d %d",&u,&v,&w);
            res.push_back((Edge){u,v,w});
            printf("%d\n",kruscal(res,n));
        }

    }

    return 0;
}
时间: 2024-11-09 00:52:39

第四届华中区程序设计邀请赛暨武汉大学第十三届校赛 网络预选赛 Problem 1566 - C - Spanning Tree的相关文章

15.4.19 第四届华中区程序设计邀请赛暨武汉大学第十三届校赛 网络预选赛

Problem 1564 - A - Circle Time Limit: 4000MS   Memory Limit: 65536KB   Total Submit: 349  Accepted: 73  Special Judge: No Description Here is a circle sequence S of length n, and you can choose a position and remove the number on it. After that,you w

第五届华中区程序设计邀请赛暨武汉大学第十四届校赛 网络预选赛 A

Problem 1603 - Minimum Sum Time Limit: 2000MS   Memory Limit: 65536KB   Total Submit: 564  Accepted: 157  Special Judge: No Description There are n numbers A[1] , A[2] .... A[n], you can select m numbers of it A[B[1]] , A[B[2]] ... A[B[m]]  ( 1 <= B[

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 B

<神无月>作为盛大游戏2017年的全新原创大作,其开发团队在自研实力强大的传世工作室基础之上,还有美树本晴彦等日本一线知名画师及日本游戏音乐大师崎元仁加盟参与制作.目前正在不限号内测中,有很多玩家进入到神无月的世界中. 在神无月中,有着玩家之间切磋的排位赛,其段位主要分为五大段位,从低到高依次为:新兵.菁英.战将.统帅.王者.每个玩家只有从新兵段位慢慢努力,一点点晋级才能到达王者段位.成为一个王者是每一个玩家的追求和心愿. 假设神无月的段位系统如下: 从低到高的段位依次简记为:D.C.B.A.

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 B合约数

链接:https://www.nowcoder.com/acm/contest/91/B来源:牛客网牛客网没有账号的同学,请用这个注册,支持楼主,谢谢. 题目描述 给定一棵n个节点的树,并且根节点的编号为p,第i个节点有属性值vali, 定义F(i): 在以i为根的子树中,属性值是vali的合约数的节点个数.y 是 x 的合约数是指 y 是合数且 y 是 x 的约数.小埃想知道对1000000007取模后的结果. 输入描述: 输入测试组数T,每组数据,输入n+1行整数,第一行为n和p,1<=n<

南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 E

链接:https://www.nowcoder.com/acm/contest/122/E来源:牛客网 题目描述 愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M.每个游戏都是多人游戏,他们打算周末一起打游戏. 小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一款游戏),并且每人手上都有一台游戏机,这种游戏机可以通过特定的游戏机连接线连接起来. 但是,他们面临着一个问题:目前没有一个朋友的游戏机是互相连接的.所以它们必须用可用的游戏机连接线连接起来.小C决定依次使用第

2018清华大学学生程序设计竞赛暨高校邀请赛

2018清华大学学生程序设计竞赛暨高校邀请赛 A. 绿绿与串串 solution 生成字符串的方式决定了:当字符串中的某个奇回文串的左端为开头,或右端为结尾时,这个奇回文串的中间的位置就是其中一个长度. 时间复杂度:\(O(n)\) B. 赛艇 solution 将路径也弄成一个矩阵,然后压位判断. 时间复杂度:\(O(\frac{1}{64}n^2m^2)\) F. 密码学第三次小作业 solution 一看它给了两个式子就知道不是暴力分解质因子. 中间有一个很特别的性质:\((e_1, e_

Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)

Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynomial like this: (a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1). Then Alice as

sdut Mountain Subsequences 2013年山东省第四届ACM大学生程序设计竞赛

Mountain Subsequences 题目描述 Coco is a beautiful ACMer girl living in a very beautiful mountain. There are many trees and flowers on the mountain, and there are many animals and birds also. Coco like the mountain so much that she now name some letter s

[2013山东省第四届ACM大学生程序设计竞赛]——Alice and Bob

Alice and Bob Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynomial like this: (a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1). T