숲 - 사실은 숲 속 의 아버지 노드 의 개 수 를 계산 하 는 것 이다.

1575 단어 이산 수학
제목:http://oj.jxust.edu.cn/contest/Problem?id=1561&pid=2
대의: 숲 속 의 뿌리 노드 의 개 수 를 구하 고 특정한 점 을 삭제 하 며 뿌리 노드 의 개 수 를 업데이트 합 니 다.
#include "iostream"
#include "vector"
using namespace std;
const int N =1e4+10;
int result[N],fa[N],city[N];//    ,   ,   
bool vis[N];//  ;
std::vector v[N];//       
int n,m,q;
int find(int x)
{
    return fa[x]=(fa[x]==x?x:find(fa[x]));//     
}
int main(int argc, char const *argv[]) {
        std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//        
        cin>>n>>m;
        for(int i=0;i>a>>b;
                v[a].push_back(b);
                v[b].push_back(a);
        }
        cin>>q;
        for(int i=0;i>city[i];
                vis[city[i]]=1;
        }

        //      
        for(int i=0;i=0;i--)
        {
                ans++;//                                             ++;  !
                vis[city[i]]=false;//     
                for(auto x:v[city[i]])
                {
                        if(!vis[x]&&find(x)!=find(city[i]))//x     && x       city    
                        {
                                ans--;//     city[i]     
                                fa[find(x)]=find(city[i]);//   
                        }
                }
                result[i-1]=ans;

        }
        for(int i=0;i

좋은 웹페이지 즐겨찾기