为什么测评不过?
查看原帖
为什么测评不过?
427120
KS_tips_CN楼主2022/2/24 17:26

以下是我的代码

这份代码在OJ上#2#4#5#6#7#9都没有通过

我下载了#2打算debug,但是发现在自己的机子上跑#2是可以输出正确答案的

请问这份代码为什么没有办法在OJ上输出正确答案呢QAQ

//#include<bits/stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<stack>
#include<list>
#include<map>
#include<set>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>
#define ll long long
#define reg register int
#define gc getchar()
#define MAXN 1001
#define MOD

using namespace std;
inline ll read( void ) ;

int n,m,ans,q1,q2;
int fth[MAXN],e[MAXN];
//fth记录父亲,e记录敌人
char ch;
inline int find(int x){
	if( fth[x] == x ) return x;
	else return fth[x] = find(fth[x]);
} 

inline void link( int a , int b ){
	int fa = find(a);
	int fb = find(b);
	if( fa != fb ){
		 //如果a和b的根节点不是同一个,那么把这两个团伙合并并且总团伙数量-1 
		 fth[fa] = find(fb);
		 ans--;
	}
}

int main( void ) {
	
//	freopen("P1892_2.in","r",stdin);
	
	n = read();
	m = read();
	ans = n;
	for( reg i = 1 ; i <= n ; i++ ) fth[i] = i;
	for( reg i = 1 ; i <= m ; i++ ){
		ch = gc;
		q1 = read();
		q2 = read();
		if( ch == 'F' ) link(q1,q2);
		else {
			if( !e[q1] ) e[q1] = q2;
			else link(e[q1],q2);
			//链接q1敌人和q2 
		}
	}
	printf("%d\n",ans);
	
	return 0;
}

inline ll read( void ) {
	ll x = 0 , f = 0 ;
   	char ch = gc ;
   	while( !isdigit( ch ) )
    	f |= ( ch == '-' ) , ch = gc ;
   	while( isdigit( ch ) )
    	x = ( x << 1 ) + ( x << 3 ) + ( ch ^ 48 ) , ch = gc ;
    return f ? -x : x ;
}

2022/2/24 17:26
加载中...