10分代码求调,本地结果正确但评测机暴WA
查看原帖
10分代码求调,本地结果正确但评测机暴WA
977904
Zhong_Yixuan楼主2024/12/21 12:36

AC on #6

下载了第一个错误的点,发现本地运行时输出正确,洛谷ide上也正确输出

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int fa[1003],inv[1003];
set<int> st;
inline ll read(){
	ll ref=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)) ref=(ref<<1)+(ref<<3)+ch-48,ch=getchar();
	return ref*f;
}
int find(int i){
	if(fa[i]==0) return i;
	return fa[i]=find(fa[i]);
}
void merge(int a,int b){
	a=find(a),b=find(b);
	if(a!=b) fa[a]=b;
}
int main(){
	int n=read(),m=read();
	while(m--){
		char c;scanf("%c",&c);
		if(c-69){
			merge(read(),read());
		}else{
			int u=read(),v=read();
			if(inv[u]) merge(inv[u],v);
			if(inv[v]) merge(inv[v],u);
			inv[u]=v,inv[v]=u;
		}
	}
	for(int i=1;i<=n;i++) if(inv[i]&&inv[find(i)]) merge(inv[i],inv[find(i)]);
	for(int i=1;i<=n;i++) st.insert(find(i));
	cout<<st.size();

	return 0;
}

此代码有两版,分别是注释33行于不注释

本人自制数据,用于区分两版代码

9 9
E 1 2
E 3 4
E 5 7
E 5 8
E 6 9
F 2 3
F 2 5
F 3 6
F 6 5

第一个测试点in

100
50
E 52 85
E 32 49
E 33 84
E 31 42
E 39 50
E 19 36
E 90 93
E 26 41
E 24 73
E 59 78
E 62 69
E 16 65
E 35 60
E 86 87
E 15 38
E 12 95
E 29 66
E 13 40
E 10 57
E 46 81
E 72 89
E 48 63
E 47 68
E 64 97
E 23 28
E 67 70
E 58 79
E 18 37
E 9 20
E 77 100
E 17 54
E 75 92
E 11 56
E 83 88
E 44 61
E 34 43
E 30 45
E 21 80
E 51 74
E 53 76
E 5 82
E 91 94
E 7 22
E 96 99
E 4 27
E 6 25
E 71 98
E 2 55
E 3 14
E 1 8

第一个测试点out:100

2024/12/21 12:36
加载中...