比赛 |
2025新春开学欢乐赛 |
评测结果 |
AAAAAAAAAA |
题目名称 |
t1 |
最终得分 |
100 |
用户昵称 |
flyfreem |
运行时间 |
1.663 s |
代码语言 |
C++ |
内存使用 |
19.41 MiB |
提交时间 |
2025-02-15 17:24:51 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1000010
// By flyfreemrn
inline ll read(){
ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
inline void write(ll x){
if(x>9)write(x/10);
putchar(x%10+'0');
}
ll f[MAXN],cnt[MAXN],pre[MAXN],n;
int main(){
freopen("flurryofblows.in","r",stdin);
freopen("flurryofblows.out","w",stdout);
n=read();
f[1]=0;
for(int i=2;i<=n;i++)f[i]=-1;
for(int i=1;i<=n;i++){
pre[i]=pre[i-1];
ll type=read();
if(type==1){
ll x=read();
pre[i]++;
cnt[x]=0;
f[x]=i;
}else{
ll x=read(),y=read();
if(f[x]==-1)continue;
if(f[y]==-1||cnt[y]-pre[f[y]]>cnt[x]-pre[f[x]]){
f[y]=f[x],cnt[y]=cnt[x];
}
if(x!=y)cnt[x]++;
}
}
for(int i=1;i<=n;i++){
if(f[i]==-1)cout<<"-1 ";
else cout<<cnt[i]+pre[n]-pre[f[i]]<<" ";
}
return 0;
}