constint N =1e5+10, M =2*N;int h[N], e[M], ne[M];// h[N]: 顶点Ni的第一个连接点bool visited[M];// 某一连接点是否已被搜索int n =0, idx =0;voidadd(int a,int b)// 添加一条边a->b{
e[idx]= b;// 创建相连点b
ne[idx]= h[a];// 该相连点b的下一点是当前顶点a的第一个连接点
h[a]= idx++;// 更新顶点a的第一个连接点}voiddfs(int u){
cout << u <<" ";
visited[u]=true;for(int i = h[u]; i !=-1; i = ne[i]){int j = e[i];if(!visited[j])dfs(j);}}intmain(){memset(h,-1,sizeof h);// 将h置为-1,表示初始时
cin >> n;// 所有顶点都没有连接点int a, b;for(int i =0; i < n -1;++i)// n - 1条无向边{
cin >> a >> b;add(a, b);add(b, a);}dfs(1);return0;}
AcWing 846. 树的重心
无向图
主要找删除某个顶点后各连通块中点个数量的关系
连通点数是个数
constint N =1e5+10, M =2*N;int h[N], e[M], ne[M];// h[N]: 顶点Ni的第一个连接点bool visited[M];// 某一连接点是否已被搜索int n =0, idx =0;voidadd(int a,int b)// 添加一条边a->b{
e[idx]= b;// 创建相连点b
ne[idx]= h[a];// 该相连点b的下一点是当前顶点a的第一个连接点
h[a]= idx++;// 更新顶点a的第一个连接点}int ans = N;intdfs(int u){
visited[u]=true;int sum =1;// 当前顶点的所有连接点个数(包含当前顶点)int ret =0;// 当前顶点各支路的连接点个数的最大值for(int i = h[u]; i !=-1; i = ne[i]){int j = e[i];if(!visited[j]){int tmp =dfs(j);
ret =max(ret, tmp);
sum += tmp;}}
ret =max(ret, n - sum);// 因为sum包含当前顶点,所以不用-1
ans =min(ans, ret);return sum;}intmain(){memset(h,-1,sizeof h);// 将h置为-1,表示初始时
cin >> n;// 所有顶点都没有连接点int a, b;for(int i =0; i < n -1;++i)// n - 1条无向边{
cin >> a >> b;add(a, b);add(b, a);}dfs(1);
cout << ans;return0;}
C OJ基础 在学校学习C程序设计基础课程的OJ题目 缺少第二十题 这里写目录标题 C OJ基础习题练习(一)打印图形习题练习(二)数据的输入输出习题练习(三)函数重载习题练习(四)设计矩形类习题练习(五)定义Tree类习题练习(六)完善职工工资类Salary的设计习题练习(七)设计矩形类recta…
请参考之前写的:2、什么是BERT?-CSDN博客文章浏览阅读826次,点赞19次,收藏22次。BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年提出的一种自然语言处理(NLP&…
如果 API 位于 Windows 命名空间中
这是你使用 Windows 运行时 API 最常见的情况。 对于元数据中定义的 Windows 命名空间中的每个类型,C/WinRT 都定义了 C 友好等效项(称为投影类型 )。 投影类型具有与 Windows 类型相同的完全限定名称&…