⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poj3180.cpp

📁 本人最近在acm.pku.edu.cn上通过的程序
💻 CPP
字号:
#include <algorithm>
#include <vector>
using namespace std;

const int MAXN = 10010;

vector<vector<int> > g, gg;
int n, m, num, t;
bool mk[MAXN];
int list[MAXN];

void back(int v)
{
    mk[v] = 1;  t++;
    for (size_t i = 0; i < gg[v]. size(); i++)
        if (!mk[gg[v][i]]) back(gg[v][i]);
}

void dfs(int u)
{
    mk[u] = 1;
    for (size_t i = 0; i < g[u]. size(); i++)
        if (!mk[g[u][i]]) dfs(g[u][i]);
    list[num--] = u;
}


int main()
{
    scanf("%d %d", &n, &m);
    g. resize(n + 1);
    gg. resize(n + 1);
    for (int i = 1; i <= m; i++)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        g[a]. push_back(b);  
        gg[b]. push_back(a);   
    }
    memset(mk, 0, sizeof(mk));
    num = n;
    for (int i = 1; i <= n; i++)
        if (!mk[i]) dfs(i);
    memset(mk, 0, sizeof(mk));
    int ans = 0;
    for (int i = 1; i <= n; i++)
        if (!mk[list[i]]) 
        {
            t = 0;
            back(list[i]);
            if (t >= 2) ans++;
        }
    printf("%d\n", ans);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -