以下是我的代码
这份代码在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 ;
}