zoukankan      html  css  js  c++  java
  • Codeforces Round #134 (Div. 2) 并查集

    1.阅读题,读明白题就能过。

    2.贪心题,简单想一想就能过。

    3.并查集,抽象出来图论模型就能过,抽象不出来,累死你。

    按照《图论算法理论、实现及应用》书上的模板敲,RE在第48组,现在也不知道为什么。

    于是敲常规的并查集:

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    struct P{
        int x,y;
    }p[100000];
    int parent[100000];
    int n;
    int find(int x){
        return x==parent[x] ? x : parent[x]=find(parent[x]);
    }
    int main(){
    
        while(scanf("%d",&n)!=EOF){
            for(int i=0;i<n;i++){
                cin >> p[i].x >> p[i].y;
            }
            for(int i=0;i<n;i++){
                parent[i]=i;
            }
            for(int i=0;i<n;i++){
                for(int j=i+1;j<n;j++){
                    if(p[i].x==p[j].x || p[i].y==p[j].y){
                        if(find(i)==find(j)) continue;
                        else parent[find(i)]=find(j);
                    }
                }
            }
            int cou=0;
            for(int i=0;i<n;i++){
                if(parent[i]==i) cou++;
            }
            printf("%d\n",cou-1);
        }
        return 0;
    }

    发现飞哥的神并查集+优化模板:

    
    
    int find(int x){
        return x==parent[x] ? x : parent[x]=find(parent[x]);
    }
    for(int i=0;i<n;i++){
                for(int j=i+1;j<n;j++){
                    if(p[i].x==p[j].x || p[i].y==p[j].y){
                        if(find(i)==find(j)) continue;
                        else parent[parent[i]]=j;
                    }
                }
            }
  • 相关阅读:
    为上次写的框架加了一个辅助功能
    复制文件夹下所有文件
    进制之间的相互转换
    c# 修改appConfig文件节点
    GUID
    太悲哀了
    poj2411 Mondriaan's Dream
    poj3311 Hie with the Pie
    HDU3001 Travelling
    luogu p2622关灯问题II
  • 原文地址:https://www.cnblogs.com/markliu/p/2645851.html
Copyright © 2011-2022 走看看