Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32052 LYLAKIOI 【S】T3 C++ 运行超时 70 2000 MS 70392 KB 3042 2024-08-30 15:21:24

Tests(7/10):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=2e5+10; inline ll read(){ ll x=0;short t=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,fa[maxn][20],dfn[maxn],siz[maxn],son[maxn],rnk[maxn],dep[maxn],top[maxn],ct; vector<pi>G; vector<int>v[maxn],vv[maxn],g[maxn];int deg[maxn]; int lca(int x,int y){ if(x==n+1)return y;if(y==n+1)return x; if(dep[x]>dep[y])swap(x,y); down(i,19,0)if(dep[fa[y][i]]>=dep[x])y=fa[y][i]; if(x==y)return x; down(i,19,0)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i]; return fa[x][0]; } void topo(){ up(i,1,n)fa[i][0]=n+1; queue<int>q;up(i,1,n)if(!deg[i])q.push(i),fa[i][0]=0,dep[i]=1; while(!q.empty()){ int x=q.front();q.pop(); dep[x]=dep[fa[x][0]]+1,g[fa[x][0]].p_b(x); up(i,1,19)fa[x][i]=fa[fa[x][i-1]][i-1]; for(int y:vv[x]){ fa[y][0]=lca(fa[y][0],x); if(!(--deg[y]))q.push(y); } } } struct SegTree { struct node { int len,sm,lz; }d[maxn<<3]; #define ls(p) (p<<1) #define rs(p) (p<<1|1) #define len(p) d[p].len #define sm(p) d[p].sm #define lz(p) d[p].lz void pu(int p){if(lz(p))sm(p)=len(p);else sm(p)=sm(ls(p))+sm(rs(p));} void bd(int l,int r,int p){ len(p)=r-l+1; if(l==r)return; int mid=l+r>>1; bd(l,mid,ls(p)),bd(mid+1,r,rs(p)); }void modify(int l,int r,int s,int t,int p,int x){ if(l<=s&&t<=r){ lz(p)+=x;pu(p);return; }int mid=s+t>>1; if(l<=mid)modify(l,r,s,mid,ls(p),x);if(r>=mid+1)modify(l,r,mid+1,t,rs(p),x);pu(p); } }T; void dfs(int u){ siz[u]=1; for(int x:g[u]){ dep[x]=dep[u]+1;dfs(x);siz[u]+=siz[x]; if(siz[x]>siz[son[u]])son[u]=x; } }void dfs2(int u,int tp){ dfn[u]=++ct,rnk[ct]=u,top[u]=tp; if(!son[u])return;dfs2(son[u],tp); for(int x:g[u])if(x!=son[u])dfs2(x,x); }void modify(int x){ while(x){ int u=top[x]; G.p_b(m_p(dfn[u],dfn[x])); T.modify(dfn[u],dfn[x],1,n,1,1); x=fa[u][0]; } } void slv(){ n=read(); up(i,1,n){ int c=read(); while(c--)v[i].p_b(read()); }up(i,1,n)for(int x:v[i])vv[x].p_b(i); up(i,1,n)deg[i]=v[i].size(); topo(); //up(i,1,n)cout<<"test "<<fa[i][0]<<"\n"; up(i,1,n)if(!dfn[i])dfs(i),dfs2(i,i); int q=read();T.bd(1,n,1); while(q--){ int k=read();G.clear(); up(i,1,k){ int x=read();modify(x); }int res=T.sm(1); printf("%d\n",res); for(auto it:G)T.modify(it.p1,it.p2,1,n,1,-1); } }int main(){ //freopen("set.in","r",stdin); //freopen("set.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; } /* */


测评信息: