题目链接:http://codeforces.com/contest/1416/problem/D
应该是图上的比较经典的问题了(然而我不会
用并查集把图区间化,思想是根据删除顺序的倒叙来建树,最后dfs序即可,然后用线段树维护答案
代码:
#include<bits/stdc++.h>
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAXN=5e5+5;
const int MAXM=3e5+5;
const int MAXQ=5e5+5;
vector<int> E[MAXN];
int n,m,q;
pii e[MAXM],mdf[MAXQ];
int p[MAXN],in[MAXN],out[MAXN];
bool vis[MAXM];
int tim=0;
struct DSU
{
int fa[MAXN];
void init(int n)
{
for(int i=1;i<=n;i++)
fa[i]=i;
}
int find(int x)
{
if(x^fa[x]) return fa[x]=find(fa[x]);
return x;
}
void merge(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) ret