标签:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
#define N 110
#define min(a, b) a<b?a:b
int n, father[N];
int visit[N], rode[N];
int rootson, ans, t, inter[N];
vector<vector<int> >G;
void Init()
{
    G.clear();
    G.resize(n+1);
    rootson=0;
    ans=0;
    t=0;
    memset(inter, 0, sizeof(inter));
    memset(visit, 0, sizeof(visit));
    memset(rode, 0, sizeof(rode));
    memset(father, 0, sizeof(father));
}
void Tarjan(int u, int fu)
{
    visit[u]=rode[u]=++t;
    father[u]=fu;
    int len=G[u].size();
    for(int i=0; i<len; i++)
    {
        int v=G[u][i];
        if(!visit[v])
        {
            Tarjan(v, u);
            rode[u]=min(rode[u], rode[v]);
        }
        else if(v!=fu)
        {
            rode[u]=min(visit[v], rode[u]);
        }
    }
}
void solve()
{
    Tarjan(1, 0);
    for(int i=2; i<=n; i++)
    {
        int v=father[i];
        if(v==1)
            rootson++;
        else if(visit[v]<=rode[i])//这一点可能不理解吧
            inter[v]=1;
    }
    for(int i=2; i<=n; i++)
    {
        if(inter[i])
            ans++;
    }
    if(rootson>1)
        ans++;
    printf("%d\n", ans);
}
int main()