自适应网站 seo怎么做,小说网站怎么做空间小,北京免费发布企业信息网站,园林专业设计学习网站题目描述 有 nn 个同学#xff08;编号为 11 到 nn #xff09;正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象#xff0c;其中#xff0c;编号为 ii 的同学的信息传递对象是编号为 T_iTi 的同学。 游戏开始时#xff0c;每人都只知道自己的生日。之… 题目描述 有 nn 个同学编号为 11 到 nn 正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象其中编号为 ii 的同学的信息传递对象是编号为 T_iTi 的同学。 游戏开始时每人都只知道自己的生日。之后每一轮中所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象注意可能有人可以从若干人那里获取信息 但是每人只会把信息告诉一个人即自己的信息传递对象。当有人从别人口中得知自 己的生日时游戏结束。请问该游戏一共可以进行几轮 输入格式 共22行。 第11行包含1个正整数 nn 表示 nn 个人。 第22行包含 nn 个用空格隔开的正整数 T_1,T_2,\cdots\cdots,T_nT1,T2,⋯⋯,Tn 其中第 ii 个整数 T_iTi 表示编号为 ii 的同学的信息传递对象是编号为 T_iTi 的同学 T_i \leq nTi≤n 且 T_i \neq iTi≠i 。 输出格式 11个整数表示游戏一共可以进行多少轮。 输入输出样例 输入 #1复制 5
2 4 2 3 1 输出 #1复制 3 说明/提示 样例1解释 游戏的流程如图所示。当进行完第33 轮游戏后 44号玩家会听到 22 号玩家告诉他自己的生日所以答案为 33。当然第 33 轮游戏后22号玩家、 33 号玩家都能从自己的消息来源得知自己的生日同样符合游戏结束的条件。 对于 30\%30%的数据 n ≤ 200n≤200 对于 60\%60%的数据 n ≤ 2500n≤2500 对于100\%100%的数据 n ≤ 200000n≤200000。 题解:找个环qwq具体我是看洛谷题解的%%%所以把题解搬运来咯 我们在连接一个点到另一个点之前先用并查集判断是否构成一个环如果是的话我们就可以记录下这个答案然后维护最小的答案。 那么如果构成一个环的话怎么记录它的长度呢 我们可以先定义一个变量cnt在并查集获取祖先的函数中使cnt的值加1最后函数结束时就能得到这个环的长度了qwq 同时如果构成了一个环就不需要把这个环的结尾接上否则会陷入死循环 最后附上短短的代码 // luogu-judger-enable-o2
#includeiostream
#includealgorithm
#includequeue
#includecmath
#includecstring
#includecstdlib
#includecstdio
using namespace std;
const int N200002;
const int oo0x3f3f3f3f;
int n,fa[N],ansoo;
int find(int x,int yc) {yc;if(fa[x]!x) return find(fa[x],yc);else return x;
}
int main(){scanf(%d,n);for(int i1;in;i)fa[i]i;int yc,biu;for(int i1;in;i) {yc0; scanf(%d,biu);if(find(biu,yc)i)ansmin(ans,yc);else fa[i]biu;}printf(%d\n,ans);return 0;
} 转载于:https://www.cnblogs.com/wuhu-JJJ/p/11318579.html