//思路是相同家庭的人存储在动态二维数组后面
//大家可以调试看一下就会明白,调试的时候很简单明了
//因为编者是菜鸟,欢迎大家批评指正
#include
using namespace std;
struct F
{
int a;
int b;
};
int main()
{
F c;
queue
vector
vector<vector
vector<std::vector
int i = 1, n, k,u;
for (p1 = P.begin(); p1 != P.end(); p1++) //二维数组初始化,其实也用不了一百个,p[i]就相当于这个人的序号
for (p2 = p1->begin(); p2 != p1->end(); p2++)
*p2 =i++;
cin >> n >> k;
for (int i = 0; i < k; i++) //入队
{
cin >>c.a >>c.b;
if (c.a < c.b)
{
C.push(c);
D.push(c);
}
else //防止100 3 ,4 3这种情况
{
u = c.a;
c.a = c.b;
c.b = u;
C.push(c);
D.push(c);
}
}
while (!C.empty()) //将队列中家庭进入二维数组找相同
{
int flag = 0; //标记, 操作成功就跳出
int biao = 0;
c = C.front();
for (p1 = P.begin(); p1 != P.end(); p1++)
{
for (p2 = p1->begin(); p2 != p1->end(); p2++)
{
if (*p2 == c.a) //相同即是一家人,就加入该数组后面
{
for (p3 = p1->begin(); p3 != p1->end(); p3++)//避免相同的的数如输入1 2 1 2
{
if (*p3 == c.b)
{
biao++;
break;
}
}
if (biao == 0)
{
p1->push_back(c.b); //加入对应的家庭
P[c.b - 1][0] = -1; //另一个序号对应的家庭赋值为-1
flag = 1;
break;
}
}
/*else if (*p2 == c.b) //为了防止输入100 3,但是前面输入时可以简单解决
{
for (p3 = p1->begin(); p3 != p1->end(); p3++)
{
if (*p3 == c.b)
{
biao++;
break;
}
}
if (biao == 0)
{
p1->push_back(c.a);
P[c.a - 1][0] = -1;
flag = 1;
break;
}
}*/
}
if (flag == 1)break;
}
C.pop(); //出队
}
//不要以下的代码只能拿到百分之八十的分数
//输入
//20 5
//1 7
//2 3
//3 7
//5 6
//7 8
while (!D.empty())
{
int flag = 0;
int biao = 0;
c = D.front();
for (p1 = P.begin(); p1 != P.end(); p1++)
{
for (p2 = p1->begin(); p2 != p1->end(); p2++)
{
if (*p2 == c.a) //相同即是一家人,就加入该数组后面
{
for (p3 = p1->begin(); p3 != p1->end(); p3++) //避免相同的的数
{
if (*p3 == c.b)
{
biao++;
break;
}
}
if (biao == 0)
{
p1->push_back(c.b);
P[c.b - 1][0] = -1;
flag = 1;
break;
}
}
}
if (flag == 1)break;
}
D.pop(); //出队
}
int max = 0;
int len = 0; //长度,来找最大家庭
int fam = 0;
for (p1 = P.begin(); p1 != P.end(); p1++)
{
len = 0;
for (p2 = p1->begin(); p2 != p1->end(); p2++)
{
len++;
}
if (len > max)max = len; //最大家庭人数
}
i = 0;
for (p1 = P.begin();i<n; i++,p1++)
{
for (p2 = p1->begin(); p2 != p1->end(); p2++)
{
if (*p2 != -1)fam++;
break;
}
}
cout << fam<<" " << max;
return 0;
}
0.0分
2 人评分