【数据规模】
对于全部的数据,N <= 100000。
WA一半 始终没找到为什么错

#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);i--) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define LL long long #define pb push_back #define fi first #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) /////////////////////////////////// #define inf 0x3f3f3f3f #define N 1000000+50 int in[N]; int vis[N]; vector<int>edge[N]; vector<int>ans; int main() { int n; RI(n); string str; rep(i,1,n) { cin>>str; if(str=="cancel") { int x; RI(x); in[x]+=1; edge[i].pb(x); } } queue<int>q; rep(i,1,n) if(in[i]==0) q.push(i); ans.clear(); while(!q.empty()) { int u=q.front();q.pop(); if(!vis[u]) ans.pb(u); if(edge[u].size()) { int x=edge[u][0]; vis[x]=1; if(edge[x].size() ) { int t=edge[x][0]; in[t]--; if(in[t]==0&&!vis[t]) q.push(t); } } } if(ans.size()) sort(ans.begin(),ans.end()); printf("%d\n",ans.size()); if(ans.size()) rep(i,0,ans.size()-1) { if(i!=0)printf(" "); printf("%d",ans[i]); } return 0; }