hdu 4750 Count The Pairs 最小生成树

简介:

      比赛时候水了,一直打算算出22直接的关系数,然后又要考虑图不连通情况等等,搞了半天还没搞定。

      其实只要一层一层慢慢加就可以了,最后结果离线或者在线处理一下均可以。

      因为最长路的最小值就相当于最小值一个一个添加

贴一下第一个AC队的代码,思路很清晰:

#include <cstdio>
#include<iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
struct edge
{
    int x,y,len;
};
inline bool operator <(const edge &a,const edge &b)
{
    return(a.len<b.len);
}
edge e[500010];
int f[10010],s[10010],a[10010];
ll sum[10010];
int find(int x)
{
    if (x!=f[x])
        f[x]=find(f[x]);
    return(f[x]);
}
int main()
{
    int n,m;
    while (scanf("%d%d",&n,&m)==2)
    {
        for (int i=1;i<=m;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            e[i].x=x+1,e[i].y=y+1,e[i].len=z;
        }
        sort(e+1,e+m+1);
        for (int i=1;i<=n;i++)
        {
            f[i]=i;
            s[i]=1;
        }
        int tot=0;
        for (int i=1;i<=m;i++)
        {
            int x=find(e[i].x),y=find(e[i].y);
            if (x==y)
                continue;
            a[++tot]=e[i].len;
            sum[tot]=ll(s[x])*s[y];
            f[x]=y;
            s[y]+=s[x];
        }
        for (int i=1;i<=tot;i++)//求和
            sum[i]+=sum[i-1];
        int Q;
        scanf("%d",&Q);
        while (Q--)
        {
            int x;
            scanf("%d",&x);
            int id=lower_bound(a+1,a+tot+1,x)-a;
            printf("%lld\n",(sum[tot]-sum[id-1])*2);
        }
    }
    return(0);
}


目录
相关文章
|
Java
hdu1016 Prime Ring Problem【素数环问题(经典dfs)】
hdu1016 Prime Ring Problem【素数环问题(经典dfs)】
48 0
hdoj 1028/poj 2704 Pascal's Travels(记忆化搜索||dp)
有个小球,只能向右边或下边滚动,而且它下一步滚动的步数是它在当前点上的数字,如果是0表示进入一个死胡同。求它从左上角到右下角到路径数目。 注意, 题目给了提示了,要用64位的整数。
37 0
HDU7050.Link with Limit(有向图tarjan找环)
HDU7050.Link with Limit(有向图tarjan找环)
139 0
|
移动开发
HDU-1016,Prime Ring Problem(DFS+素数)
HDU-1016,Prime Ring Problem(DFS+素数)
Biggest Number深搜
You can start from any square, walk in the maze, and finally stop at some square. Each step, you may only walk into one of the four neighbouring squares (up, down, left, right) and you cannot walk into obstacles or walk into a square more than once.
114 0
Biggest Number深搜
HDOJ 1016 Prime Ring Problem素数环【深搜】
HDOJ 1016 Prime Ring Problem素数环【深搜】
117 0
HDOJ 1016 Prime Ring Problem素数环【深搜】
|
存储 测试技术
HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)
HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)
102 0
|
C语言
HDOJ 1016 Prime Ring Problem素数环【深搜2】
HDOJ 1016 Prime Ring Problem素数环【深搜】
97 0