题解 CF94B 【Friends】
\[\texttt{题目大意}
\]
\(\quad\)题目的意思是如果 \(5\) 人有 \(3\) 个人都认识或都不认识则证明这个定理就是一个渣渣,伊戈尔·凯赢("WIN"),不存在即证明他输了("FAIL")
\[\texttt{思路}
\]
\(\quad\)一开始以为是并查集,结果发现 \(m<=10\),\(a_i<=5\),\(b_i<=5\),暴力枚举即可,那么这题也估计就红题的难度,时间复杂度 \(O(5^3)\)。
\(\quad\)用 \(a_{i,j}=1\) 表示 \(i\) 和 \(j\) 互相认识,从这五个人中枚举三个人 \((i,j,k)\) 判断这三人都认识或都不认识即可。
if((a[i][j]&&a[i][k]&&a[j][k])||(!a[i][j]&&!a[i][k]&&!a[j][k]))flag=1;//核心代码
\(\quad\)用 \(flag\) 来判断,为 \(1\) 表示存在即输出 "WIN",否则为 \(0\) 输出 "FAIL"。
\(\quad\)Code
#include<iostream>
#include<cstdio>
#include<cstring>
#define re register int
using namespace std;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
int n,a[6][6],flag;
signed main()
{
n=read();
for(re i=1,x,y;i<=n;i++)x=read(),y=read(),a[x][y]=a[y][x]=1;
for(re i=1;i<=3;i++) //注意i,j,k不重复
{
for(re j=i+1;j<=4;j++)
{
for(re k=j+1;k<=5;k++)
if((a[i][j]&&a[i][k]&&a[j][k])||(!a[i][j]&&!a[i][k]&&!a[j][k]))
flag=1;//核心代码,标记
}
}
if(flag)puts("WIN");else puts("FAIL");
return 0;
}
希望能过