zoukankan      html  css  js  c++  java
  • poj1144

    求割点

    模板:

    void dfs(int fa, int u)
    {
    low[u]
    = dfn[u] = cnt++;
    for (int i = 0; i < n; i++)
    if (g[u][i] && i != fa)
    {
    if (dfn[i] == -1)
    {
    dfs(u, i);
    low[u]
    = min(low[i], low[u]);
    if (dfn[u] <= low[i])
    is[u] = true;;
    }
    else
    low[u]
    = min(low[u], dfn[i]);
    }
    }


    call:
    memset(dfn,
    -1, sizeof(dfn));
    memset(
    is, 0, sizeof(is));
    for (int i = 0; i < n; i++)
    if (dfn[i] == -1)
    {
    dfn[i]
    = cnt++;
    int x = 0;
    for (int j = 0; j < n; j++)
    if (g[i][j] && dfn[j] == -1)
    {
    dfs(i, j);
    x
    ++;
    }
    if (x > 1)
    is[i] = true;
    }
    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    using namespace std;

    #define maxn 105

    bool g[maxn][maxn], is[maxn];
    char st[maxn * maxn];
    int dfn[maxn], low[maxn];
    int cnt;
    int ans;
    int n;

    void input()
    {
    memset(g,
    0, sizeof(g));
    int a, b;
    while (scanf("%d", &a), a)
    {
    a
    --;
    if (getchar() != ' ')
    continue;
    do
    {
    scanf(
    "%d", &b);
    b
    --;
    g[a][b]
    = true;
    g[b][a]
    = true;
    }
    while (getchar() == ' ');
    }
    }

    void dfs(int fa, int u)
    {
    low[u]
    = dfn[u] = cnt++;
    for (int i = 0; i < n; i++)
    if (g[u][i] && i != fa)
    {
    if (dfn[i] == -1)
    {
    dfs(u, i);
    low[u]
    = min(low[i], low[u]);
    if (dfn[u] <= low[i])
    is[u] = true;;
    }
    else
    low[u]
    = min(low[u], dfn[i]);
    }
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    while (scanf("%d", &n), n)
    {
    getchar();
    cnt
    = 0;
    ans
    = 0;
    input();
    memset(dfn,
    -1, sizeof(dfn));
    memset(
    is, 0, sizeof(is));
    for (int i = 0; i < n; i++)
    if (dfn[i] == -1)
    {
    dfn[i]
    = cnt++;
    int x = 0;
    for (int j = 0; j < n; j++)
    if (g[i][j] && dfn[j] == -1)
    {
    dfs(i, j);
    x
    ++;
    }
    if (x > 1)
    is[i] = true;
    }
    for (int i = 0; i < n; i++)
    if (is[i])
    ans
    ++;
    printf(
    "%d\n", ans);
    }
    return 0;
    }
  • 相关阅读:
    Shell 脚本基本操作练习
    Unix 环境高级编程---线程创建、同步、
    ubuntu 安装ssh-server时出现错误:openssh-server: Depends: openssh-client (= 1:5.3p1-3ubuntu3) but 1:5.3p1-3ubuntu4 is to be installed
    python set 集合
    python 深浅拷贝
    用户权限管理
    vim 编辑器的使用
    linux系统初体验
    平滑升级nginx
    在windows下如何使用密钥对远程登录服务器?
  • 原文地址:https://www.cnblogs.com/rainydays/p/2158258.html
Copyright © 2011-2022 走看看