44分玄学小错误 WA 求调
查看原帖
44分玄学小错误 WA 求调
1020063
chenxi2009楼主2025/2/4 08:21

AC on 样例、#4&6、#7~11、#18。

错误信息:

line 83 column 2, read 8, expected 3.
line 71566 column 4, read 4, expected 1.
line 18068 column 5, read 9, expected 4.
line 19110 column 6, read 8, expected 5.
...... 在第五组(第一个信息)应该是被特意卡了?似乎所有信息中都是我输出偏大了一些。

提交记录链接

代码

#include<bits/stdc++.h>
using namespace std;
int f[300000],n,m,u,v;
char t[300000];
long long s[300000],ans[300000];
int find(int x){
	return x == f[x] ? x : f[x] = find(f[x]);
}
vector<int>e[300000];
int main(){
	scanf("%d%d%s",&n,&m,t + 1);
	for(int i = 1;i <= n;i ++) f[i] = i;
	for(int i = 1;i <= m;i ++){
		scanf("%d%d",&u,&v);
		if(u > v) swap(u,v);
		if(t[u] == '1') f[find(u)] = find(v);
		e[u].push_back(v),e[v].push_back(u);
	}
	for(int i = n;i;i --){
		ans[i] = ans[i + 1];
		int u = find(i);
		for(auto j : e[i]){
			if(j < i) continue; 
			int v = find(j);
			if(u != v){
				ans[i] -= s[u] * (s[u] - 1) + s[v] * (s[v] - 1);
				s[u] += s[v],f[v] = u;
				ans[i] += s[u] * (s[u] - 1);
			}
		}
		s[u] ++;
		ans[i] += 2 * s[u] - 2; 
	}
	for(int i = 1;i <= n;i ++) printf("%lld\n",ans[i] / 2);
	return 0;
}

2025/2/4 08:21
加载中...