煜煜不会AC


私信TA

用户名:uq_75590980498

访问量:108

签 名:

等  级
排  名 38698
经  验 395
参赛次数 0
文章发表 1
年  龄 21
在职情况 学生
学  校 重庆工程学院
专  业 软件工程

  自我简介:

TA的其他文章

//思路是相同家庭的人存储在动态二维数组后面

//大家可以调试看一下就会明白,调试的时候很简单明了

//因为编者是菜鸟,欢迎大家批评指正

#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 人评分

  评论区

  • «
  • »