本文共 1305 字,大约阅读时间需要 4 分钟。
板子
//#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define mem(a,b) memset(a,b,sizeof(a))#define ll long long#define sd(x) scanf("%d",&(x))#define sl(x) scanf("%lld",&(x))#define slf(x) scanf("%lf",&(x))#define scs(s) scanf("%s",s)#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)#define lowbit(x) x&(-x)#define ls now<<1#define rs now<<1|1#define lson l,mid,ls#define rson mid+1,r,rs#define All L,Rusing namespace std;const int maxn=2e6+10;struct edge{ int u,v,w,next;}e[maxn];int top,mub,root,Max,ans,n,k,cnt,tot=0;int g[maxn],Size[maxn],dist[maxn];bool vis[maxn];void make(int u,int v,int w){ e[++tot]=(edge){u,v,w,g[u]}; g[u]=tot;}void init(){ mem(g,0); tot=0; top=0; ans=0; mem(vis,0);}void get_root(int u,int f){ Size[u]=1; int ma=0; for(int i=g[u];i;i=e[i].next) { int v=e[i].v; if(v!=f&&!vis[v]) { get_root(v,u); Size[u]+=Size[v]; ma=max(ma,Size[v]); } } ma=max(ma,cnt-Size[u]); if(ma k) j--; res+=j-i; i++; } return res;}void work(int u){ Max=n; get_root(u,-1); cnt=Size[u]; ans+=calc(root,0); vis[root]=true;// cout<<"root: "< <
转载于:https://www.cnblogs.com/minun/p/11361842.html