树上差分(砍树)蓝桥杯

#include 
using namespace std;
int n,m,tot=0,a,b,ans=0;
const int N=1e6+10;
int vis[N]={0},fa[N]={0},F[N]={0};
int ver[N]={0},Next[N]={0},edge[N]={0},head[N]={0};
map,int> Pos;
vector query[N];
void add(int x,int y,int z){
    ver[++tot]=y,edge[tot]=z,Next[tot]=head[x],head[x]=tot;
    
}
void add_query(int x,int y){
    query[x].push_back(y);
    query[y].push_back(x);
}
int find(int x){
    if(x==fa[x]) return x;
    return fa[x]=find(fa[x]);
}
void tarjan(int u){
    vis[u]=1;
    for(int i=head[u];i;i=Next[i]){
        int y=ver[i];
        if(!vis[y]){
            tarjan(y);
            fa[y]=u;
        }
    }
    for(int i=0;i

你可能感兴趣的:(c++,算法,图论)