QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#360281#6127. Kawa Examviq2347WA 3ms17740kbC++142.3kb2024-03-21 16:50:102024-03-21 16:50:10

Judging History

你现在查看的是最新测评结果

  • [2024-03-21 16:50:10]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:17740kb
  • [2024-03-21 16:50:10]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define RSET(_$,$_) for(int _=1;_<=$_;++_)_$[_].clear();
constexpr int N=1e5+7;
int c[N],po[N],low[N],c1,c2;
basic_string<pair<int,int>>e[N],g[N];
basic_string<int>stk,cpo[N];
inline void tarjan(int x,int f){
	stk+=x;
	int dfn=low[x]=++c1;
	for(auto[i,_]:e[x]) if(_!=f){
		if(!low[i]) tarjan(i,_);
		low[x]<low[i]?:low[x]=low[i];
	}
	if(low[x]==dfn){
		++c2;
		do  cpo[c2]+=stk.back(),
			po[stk.back()]=c2,
			stk.pop_back();
		while(cpo[c2].back()!=x);
	}
}
map<int,int> M[N],P,_p,Q,_q;
int h[N],s[N],A[N],res[N];
bitset<N> vi;
inline void dfs1(int x,int f){
	int t=0;
	s[x]=1;
	for(auto[i,_]:g[x]) if(i!=f){
		A[i]=_,dfs1(i,x);
		s[i]<t?:(t=s[i],h[x]=i);
		s[x]+=s[i];
	}
}
inline void upd(int x){
	for(auto[k,c]:M[x])
		--_p[P[k]], P[k]+=c, ++_p[P[k]];
	for(auto[k,c]:M[x])
		--_q[Q[k]],_q[Q[k]]?:_q.erase(Q[k]),
		Q[k]-=c, ++_q[Q[k]];
}
inline void dfs2(int x,int f){
	for(auto[i,_]:g[x]) if(i!=f)
		dfs2(i,x);
	upd(x);
}
int la;
void dfs3(int x,int f,bool d=0){
	vi[x]=1;
	if(h[x]){
	for(auto[i,_]:g[x]) if(i!=f&&i!=h[x]) dfs3(i,x);
	dfs3(h[x],x,1);
	for(auto[i,_]:g[x]) if(i!=f&&i!=h[x]) dfs2(i,x);}
	upd(x);
	res[A[x]]=_p.rbegin()->first+_q.rbegin()->first-la;
	if(!d){for(auto[k,c]:P)--_q[Q[k]],Q[k]+=c,++_q[Q[k]];
		P.clear(), _p.clear();}
}
inline void dfs4(int x,int f){
	for(auto[k,c]:M[x])
		--_q[Q[k]], Q[k]+=c, ++_q[Q[k]];
	for(auto[i,_]:g[x]) if(i!=f)
		dfs4(i,x);
}
main(){
cin.tie(0)->sync_with_stdio(0);
int t;
cin>>t;
while(t--){
	int n,m,tans=c1=c2=0;
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		cin>>c[i];
	for(int i=1,p,q;i<=m;++i)
		cin>>p>>q,
		e[p]+={q,i},e[q]+={p,i};
	for(int i=1;i<=n;++i)
		if(!low[i]) tarjan(i,0);
	for(int i=1;i<=c2;++i)
		for(int j:cpo[i])
			++M[i][c[j]];
	for(int i=1;i<=n;++i) for(auto[j,id]:e[i])
		if(po[i]!=po[j])
			g[po[i]]+={po[j],id};
	for(int i=1;i<=c2;++i)
		if(!s[i]) dfs1(i,0);
	for(int i=1;i<=c2;++i) if(!vi[i]){
		P.clear(),_p.clear();Q.clear(),_q.clear();
		dfs4(i,0);
		tans+=la=_q.rbegin()->first;
		dfs3(i,0,1);
	}
	for(int i=1;i<=m;++i)
		cout<<res[i]+tans<<" "[i==m];
	cout<<'\n';
	RSET(e,n);RSET(g,c2);RSET(cpo,c2);RSET(M,c2);
	vi.reset();
	bzero(h+1,4*c2);
	bzero(s+1,4*c2);
	bzero(res+1,4*m);
	bzero(low+1,4*n);
}
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 3ms
memory: 17740kb

input:

3
7 5
1 2 1 2 1 2 1
1 2
1 3
2 4
5 6
5 7
3 3
1 2 3
1 2
1 3
2 3
2 3
12345 54321
1 2
1 2
1 1

output:

6 5 5 5 4

result:

wrong answer 1st lines differ - expected: '6 5 5 5 4', found: '6 5 5 5 4'