北航的同学扔过来的题目。
你航还真是凶残,同学没语言基础,下半年开学才开始接触C语言,现在就做这种题。
能写出直接模拟的办法,时间复杂度O(n^2),空间复杂度(O^2),实在是谈不上优秀。
按照题目的hint可以写出另一种,每个人的秘密最终都会到达n,但是每个人传递的节点是唯一的,只要把每个人传递到n的节点数数出来求最大就vans了。
我还以为是个难题,结果是个水题。
使用自然下标操作,即从1开始计数。
#include <stdio.h>
#define MAX 1000
int n;
int order[MAX+1];//穿话对象
int board[MAX+1][MAX+1]={
0};//标志位,a知道了b的真心话就是board[a][b]=1,C++下可以用bool数组代替
int check();//检查第n个人是不是都知道了
void merge(int from,int to);//把from知道的所有真心话传给to
int main(int argc, char const *argv[])
{
int i;
int cnt=0;
scanf