zoukankan      html  css  js  c++  java
  • 51nod 1535深海探险 并查集/dfs

    这题刚开始可能想的复杂了,(想用并查集判断是否有圆,之后Tarjan判断触手),看了大神的代码,orz,可能对图论的基本概念不是很了解,这个东西叫做环套树

    (N==M时成立)

    上代码了orz

    #include <algorithm>
    #include <stdio.h>
    #include <stack>
    #include <istream>
    #include <map>
    #include <math.h>
    #include<iostream>
    #include <queue>
    #include <string.h>
    #include<set>
    #include <cstdio>
    using namespace std;
    const int maxn = 1e3+5;

    //int edge[maxn][maxn];
    int fa[maxn];
    int N, M;
    int fin(int x) {
    while (x != fa[x])x = fa[x];
    return x;
    }
    void unite(int x, int y) {
    x = fin(x), y = fin(y);
    if(x==y)return ;
    fa[x] = y;
    }
    int main() {
    cin >> N >> M;
    for (int i = 0; i <= N; i++)fa[i] = i;
    for (int i = 0; i < M; i++) {
    int l, r;
    cin >> l >> r;
    //edge[l][r] = edge[r][l] = 1;
    unite(l, r);
    }
    if(N!=M){
    puts("NO");return 0;
    }
    int tem = fin(1);
    // bool f = 1;
    for (int i = 1; i <= N; i++) {
    if (tem != fin(i)) {
    puts("NO"); return 0;
    }
    }
    //if(m==N)
    puts("FHTAGN!");
    return 0;
    }

    我身后空无一人,我怎敢倒下
  • 相关阅读:
    台阶问题,100层台阶,1,2,3步组合走完。一种有几种组合?
    idea 导入gitlab项目
    查找学生信息
    谁是你潜在的朋友
    Sort
    统计同成绩学生人数
    打印日期
    今年的第几天?
    DayOfWeek
    日期差值
  • 原文地址:https://www.cnblogs.com/DreamKill/p/8762315.html
Copyright © 2011-2022 走看看