Fixed it with a nested for-loop so it passed the test above, still WA tho :/
Code: Select all
ac
Moderator: Board moderators
Code: Select all
ac
Code: Select all
2
A
B
Code: Select all
1
2
Code: Select all
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#define MAX 5000
using namespace std;
int par[1000];
int flag;
int node;
void makeset (int n)
{
for(int i=1; i<=n; i++)
par[i] = i;
}
int find (int a)
{
if(par[a]==a) return a;
else
return par[a] = find(par[a]);
}
void makeunion(int a, int b)
{
int u = find(a);
int v = find(b);
if(u!=v){
par[u] = v;
}
}
int char2int (char c)
{
return c-'A'+1;
}
void input()
{
char ch[5];
while(gets(ch)&&ch[0]){
int ln;
ln = strlen(ch);
if(ln==1){
node = char2int(ch[0]);
makeset(node);
}
else{
int a = char2int(ch[0]);
int b = char2int(ch[1]);
makeunion(a,b);
}
}
}
void free ()
{
for(int i=0; i<=node; i++){
par[i]=0;
}
node = 0;
}
int main()
{
int n,i,j,a,b,cnt;
scanf("%d%*c%*c",&n);
flag = 0;
while(n--){
input();
cnt = 0;
for(i=1; i<=node; i++){
if(par[i]==i)
cnt++;
}
if(flag==0)
flag = 1;
else
cout<<endl;
cout<<cnt;
free();
}
return 0;
}
Code: Select all
1
Z
AC
AD
AE
AI
AL
AM
AN
AO
AQ
AS
AV
AW
AX
AY
BF
BH
BJ
BK
BL
BM
BN
BO
BP
BQ
BR
BU
BV
BW
BY
CE
CG
CI
CJ
CM
CP
CT
CU
CV
CY
DF
DG
DJ
DK
DL
DM
DN
DO
DQ
DV
DX
EF
EH
EK
EL
EM
EN
EO
ER
ES
ET
EU
EY
EZ
FG
FH
FI
FJ
FM
FN
FO
FP
FR
FU
FW
FY
FZ
GH
GL
GM
GP
GQ
GR
GS
GZ
HI
HJ
HK
HL
HQ
HR
HS
HV
HW
HY
IK
IM
IO
IP
IR
IU
IV
IX
IY
IZ
JK
JL
JM
JN
JR
JW
KM
KO
KP
KR
KS
KX
KY
KZ
LO
LP
LQ
LR
LY
MN
MO
MP
MR
MT
MU
MV
MX
MZ
NP
NR
NT
NV
NY
OQ
OV
OW
OX
PR
PS
PT
PV
PW
PX
PY
PZ
QR
QT
QV
QY
RT
RU
RW
RY
RZ
ST
SV
SZ
TX
TY
TZ
UW
UY
UZ
VW
WZ
XY
XZ
Code: Select all
1
E
AB
Code: Select all
so the graph is
A -> B
C
D
E
Code: Select all
enjoying life .....
Code: Select all
#include <bits/stdc++.h>
using namespace std;
int par[30];
void makeset(int n)
{
par[n] = n;
}
int findpar(int n)
{
if(par[n] == n)
return n;
else
return (par[n] = findpar(par[n]));
}
void Union(int a, int b)
{
int para = findpar(a);
int parb = findpar(b);
if(para != parb)
{
par[parb] = para;
}
}
int main()
{
freopen("in.txt", "r", stdin);
set<int> Sets;
int num, t;
char largest, a, b;
scanf("%d", &t);
getchar();
getchar();
while(t--)
{
Sets.clear();
num = 0;
scanf("%c", &largest);
if(largest == '\n')
break;
getchar();
for(char i='A'; i<=largest; i++)
makeset(i-64);
while(true)
{
a = getchar();
if(a != '\n')
b = getchar();
else
break;
Union(a-64, b-64);
getchar();
}
for(char i='A'; i<=largest; i++)
{
Sets.insert(findpar(i-64));
}
printf("%d\n\n", Sets.size());
}
return 0;
}
Code: Select all
#include <bits/stdc++.h>
using namespace std;
int par[30];
int num;
void makeset(int n)
{
par[n] = n;
}
int findpar(int n)
{
if(par[n] == n)
return n;
else
return (par[n] = findpar(n));
}
void Union(int a, int b)
{
int para = findpar(a);
int parb = findpar(b);
if(para != parb)
{
par[parb] = para;
num++;
}
}
int main()
{
int t;
char largest;
char a, b;
scanf("%d", &t);
getchar();
while(t--)
{
num = 0;
scanf("%c", &largest);
getchar();
for(char i='A'; i<=largest; i++)
makeset(i-64);
while(true)
{
a = getchar();
if(a != '\n')
b = getchar();
else
break;
cout << a << " " << b;
Union(a-64, b-64);
getchar();
}
printf("%d\n", num);
}
return 0;
}
Code: Select all
AC
thank bfry :>