zoukankan      html  css  js  c++  java
  • HDU6187 Destroy Walls

     
     
    把这道题放了很久才来更新blog,似乎越来越懒了啊。
    我们发现他给的城堡的坐标非常有趣啊,都是无理数。
    对于其他所有点的坐标都是有理数的情况下,一个坐标为无理数的点绝对特别。
    特别之处就是:经过任意两个坐标为有理数的点的直线或线段是不会经过坐标为无理数的点的。
    那又怎样呢?
    我们知道,如果一个平面上一个点可以到达平面的任何地方,这个平面是一定没有封闭的区域的。
    什么叫没有封闭的区域?就是没有环。
    既然没有环,又需要减少最少的边,那么就是要变成一堆树啦(森林)。
    而我们在减少最少的边的情况下,又需要减掉的边的权值和最小。
    那么就是留下的树上的边的权值和最大,不是最大生成树还是什么?
    题上给的什么塔的坐标就是迷惑你的,根本没用的,反正这些边也不会经过城堡,不是需要强拆的。
    //Serene
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int maxn=1e5+10,maxm=2e5+10;
    int n,m,fa[maxn],ans1,ans2;
    
    int aa,ff;char cc;
    int read() {
        aa=0;ff=1;cc=getchar();
        while(cc<'0'||cc>'9') {
            if(cc=='-') ff=-1;
            cc=getchar();
        }
        while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
        return aa*ff;
    }
    
    int find(int x) { return x==fa[x]? x:fa[x]=find(fa[x]); }
    
    struct Node{
        int x,y,w;
    }node[maxm];
    
    bool cmp(const Node& a,const Node& b) {
        return a.w>b.w;
    }
    
    int main() {
        while(scanf("%d%d",&n,&m)==2) {
            int x,y,xx,yy; ans1=ans2=0;
            for(int i=1;i<=n;++i) { x=read();y=read(); fa[i]=i;}
            for(int i=1;i<=m;++i) {
                node[i].x=read();
                node[i].y=read();
                node[i].w=read();
            }
            sort(node+1,node+m+1,cmp);
            for(int i=1;i<=m;++i) {
                x=node[i].x;y=node[i].y;
                xx=find(x);yy=find(y);
                if(xx==yy) ans1++,ans2+=node[i].w; else fa[xx]=yy;
            }
            printf("%d %d
    ",ans1,ans2);
        }
        return 0;
    }
    

      

    弱者就是会被欺负呀
  • 相关阅读:
    BF算法(串模式匹配算法)
    python字符串 常用函数 格式化字符串 字符串替换 制表符 换行符 删除空白 国际货币格式
    python 列表
    python 循环语句
    http://www.pythontutor.com/visualize.html#mode=edit python在线检测代码
    GDI+_绘制QQ头像
    socket编程之select()
    socket编程之select()
    设置itemcontrol的item点击前后不同状态
    设置itemcontrol的item点击前后不同状态
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/7646499.html
Copyright © 2011-2022 走看看