Codeforces455C. Civilization

数据可视化—power bi 基础操作汇总 数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 . 阅读详情

Andrew plays a game called “Civilization”. Dima helps him.

The game has n cities and m bidirectional roads. The cities are numbered from 1 to n. Between any pair of cities there either is a single (unique) path, or there is no path at all. A path is such a sequence of distinct cities v1, v2, …, vk, that there is a road between any contiguous cities vi and vi + 1 (1 ≤ i < k). The length of the described path equals to (k - 1). We assume that two cities lie in the same region if and only if, there is a path connecting these two cities.

During the game events of two types take place:

Andrew asks Dima about the length of the longest path in the region where city x lies.
Andrew asks Dima to merge the region where city x lies with the region where city y lies. If the cities lie in the same region, then no merging is needed. Otherwise, you need to merge the regions as follows: choose a city from the first region, a city from the second region and connect them by a road so as to minimize the length of the longest path in the resulting region. If there are multiple ways to do so, you are allowed to choose any of them.
Dima finds it hard to execute Andrew’s queries, so he asks you to help him. Help Dima.

Input
The first line contains three integers n, m, q (1 ≤ n ≤ 3·105; 0 ≤ m < n; 1 ≤ q ≤ 3·105) — the number of cities, the number of the roads we already have and the number of queries, correspondingly.

Each of the following m lines contains two integers, ai and bi (ai ≠ bi; 1 ≤ ai, bi ≤ n). These numbers represent the road between cities ai and bi. There can be at most one road between two cities.

Each of the following q lines contains one of the two events in the following format:

1 xi. It is the request Andrew gives to Dima to find the length of the maximum path in the region that contains city xi (1 ≤ xi ≤ n).
2 xi yi. It is the request Andrew gives to Dima to merge the region that contains city xi and the region that contains city yi (1 ≤ xi, yi ≤ n). Note, that xi can be equal to yi.
Output
For each event of the first type print the answer on a separate line.

题意:求一棵里面的直径2333最长的最短路?第一次做 还有点小刺激呢,两棵树合并的时候,直径的处理贪心一下,毛估估应该是在直径的中点开始贪,那这课新树的直径就应该是 合并出来的那条路 (d1+1)/2+(d2+1)/2 +1和原来的两个直径里面取一个最大。最初的直径怎么求呢。由于是树没有环,那先走一次,走到底,找出那个最大的点,再反向求一次,取一个最大就可以了

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
#include<map>
using namespace std;

//thanks to pyf ...

#define INF 0x3f3f3f3f
#define CLR(x,y) memset(x,y,sizeof(x))
#define mp(x,y) make_pair(x,y)
typedef pair<int,int> PII;
typedef long long ll;

const int N = 1e5+5;

struct Edge
{
    int u,v,next;
}edge[N*6];
int fa[N*3];
int head[N*3];
int val[N*3];
int tot=0;
int root;
int longest_p = 0;
int longest_l = 0;
int n;
void init()
{
    for(int i=0;i<=n;i++)
        fa[i] = i;
    CLR(head,-1);
    tot = 0;
    CLR(val,0);
}
void add_edge(int u,int v)
{
    edge[tot].u = u;
    edge[tot].v = v;
    edge[tot].next = head[u];
    head[u] = tot ++;
}
int find(int x)
{
    if(fa[x]!=x)
        fa[x] = find(fa[x]);
    return fa[x];   
}
void merge(int a,int b)
{
    a = find(a);
    b = find(b);
    if(a!=b)
    {
        fa[a] = fa[b];
        val[fa[b]] = max(max(val[a],val[b]),(val[a]+1)/2 + (val[b]+1)/2 + 1);
    }
}
void dfs(int u,int Fa,int d)
{
    fa[u] = root;
    if(d>longest_l)
    {
        longest_l = d;
        longest_p = u;
    }
    for(int i=head[u];i!=-1;i=edge[i].next)
    {
        int v = edge[i].v;
        if(v == Fa)
            continue;
        dfs(v,u,d+1);
    }
}
int main()
{
    int m,q;
    while(scanf("%d%d%d",&n,&m,&q)==3)
    {
        init();
        for(int i=0;i<m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            add_edge(u,v);
            add_edge(v,u);
        }
        for(int i=1;i<=n;i++)
        {
            if(fa[i]!=i)
                continue;
            root = i;
            longest_l = 0;
            longest_p = i;
            dfs(i,i,0);
    //      cout <<"***" <<  i << " " << longest_l << " " << longest_p << endl;
            val[root] = longest_l;
            dfs(longest_p,longest_p,0);
            val[root] = max(val[root],longest_l);   
        }
        for(int i=0;i<q;i++)
        {
            int op,x,y;
            scanf("%d",&op);
            if(op==1)
            {
                scanf("%d",&x);
                printf("%d\n",val[find(x)]);
            }
            else
            {
                scanf("%d%d",&x,&y);
    //          cout << "***" << find(x) << " " << find(y) << " " << val[find(x)] << " " << val[find(y)] << endl; 
                merge(x,y);
            }
        }
    }
    return 0;
}
Transformer实战(5)——Hugging Face环境配置与应用详解 本文详细介绍 Transformer 模型的实践应用全流程。首先讲解基于 Anaconda 的环境配置,包括 transformers 库安装及 hf-mirror 镜像加速方案。然后以 BERT 为例,演示分词器使用、文本编码及 fill-mask 等任务实现,对比 PyTorch/TensorFlow 框架差异。接着展示 Hugging Face 社区模型应用,包括 GPT-2 文本生成和零样本分类。最后扩展至多模态领域,使用 CLIP 模型实现零样本图像分类。 阅读详情

相关推荐

接口自动化测试如何做?测试老鸟总结,接口测试数据构造大全......

接口参数的数据获取:接口文档:接口文档通常会包含接口需要的请求参数和返回结果的格式、类型等信息;测试用例设计:根据测试用例设计的需求,可以确定需要哪些请求参数以及期望的响应结果;业务数据:从实际业务场景中获取数据,以确保测试数据的真实性和代表性;数据库:从数据库中获取数据,作为接口测试的输入参数;随机数据生成器:通过随机数据生成器生成测试数据,以增加测试用例的多样性和覆盖率。在选择数据来源时,需要根据具体情况进行选择。如果有可靠的接口文档,可以直接从文档中获取请求参数和预期结果;

798

CodeForces 455C (贪心,并查集)

题意: 给出一个n个点m条边的森林,q次询问,第一种询问要求输出一个点所在树的直径,第二种询问要求合并两个点所在的树。 思路: 先将初始的森林中各个树的直径求出来,然后用并查集维护。两树合并时,设直径分别为len1,len2,新树直径为max(len1,len2,(len1/2)+(len2/2)+(len1%2)+(len2%2)+1),即两颗旧树的直径,两颗旧树直径的一半向上取整加一,中的...

陋室 445

Accelstepper 库中的参数计算公式

要完全调试电机的各个参数,例如最大速度,加速度等,就需要了解其计算公式和原理。 以下是代码注释: /// This code uses speed calculations as described in /// "Generate stepper-motor speed profiles in real time" by David Austin/// http://fab.cba.mi...

wenguitao的博客 4455

Codeforces 455C Civilization(并查集+树形dp)

Codeforces 455C题目中文题意http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1427思路判断是否在一个区域用并查集就可以实现,求最长路径我用的是两遍dfs,就可以求出,对于合并,去两个区域最长部分的中间点连边,保证最短,貌似dfs很慢,递归的并查集还超了。代码#include <cstdio> #include

天道酬勤 368

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3257

华为海思IC笔试通关秘籍:物理/电路/工艺三大方向高频考点解析(附真题)

本文深度解析华为海思IC笔试中物理设计、电路设计和工艺制造三大方向的高频考点与备考策略。针对华为海思IC笔试机考的特点,提供了方向选择建议、核心知识梳理及真题实战技巧,帮助考生构建系统性复习框架,高效备战,提升通关成功率。

mars5的博客 1308

CodeForces 455C-Civilization

题目 C. Civilization time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Andrew plays a game called "Civilization". Dim

Druning的博客 664

【数据分享】1985-2023 年中国 30m 生长季 NDVI 数据集:刘小平团队力作,Landsat 无缝融合无云产品

中山大学刘小平团队发布1985-2023年中国30m分辨率生长季Landsat NDVI数据集,解决了传统数据的三大痛点:无缝拼接、时间连续和质量可靠。该数据集基于5-9月生长季Landsat影像,通过云检测、多景融合等技术生成,已在GEE平台开放共享。其高分辨率、长时序特性为植被动态监测、LUCC研究等提供重要支撑,在农业、生态保护等领域具有广泛应用价值。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1506

codeforces 455C C. Civilization(树形dp+树的直径+并查集)

题目链接:codeforces 455C题目大意:给出一些点,他们之间初始存在一些边,给出两种操作,第一种是查询某个点所在的树的直径,另一种是将两个树合并,要求使合并后的树的直径最小。题目分析: 首先算取没做操作前的连通块里的树的直径,也就是先dfs一遍,找到深度最大的点,然后从这个点再搜,找到的最远的距离就是这棵树的直径,因为可以证明从根搜深度最大的点一定是树的直径的一个端点,因为它可以通过到达次

llin-黎辰 2680

Python爬虫实战:高效爬取华尔街日报文章的技术与代码详解

在当今信息爆炸的时代,金融数据和分析对于投资者、研究人员和企业决策者来说至关重要。华尔街日报(WSJ)作为全球最具影响力的财经媒体之一,其文章内容具有极高的价值。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的华尔街日报文章爬虫,涵盖从基础到高级的各种技术要点。本文详细介绍了如何使用Python最新技术构建一个高效、稳定的华尔街日报文章爬虫。我们从基础爬虫实现开始,逐步添加了高级功能如分布式处理、反反爬虫策略、数据清洗和存储等。异步处理:使用asyncio和httpx实现高性能网络请求。

2201_76125261的博客 385

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

【打CF,学算法——四星级】CodeForces 455C Civilization (【详解】并查集+树的直径)

题目链接:CF 455C 题面: C. Civilization time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Andrew plays a game called

David_Jett 1313

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 424

CodeForces 455C Civilization

题目大意 %  给定一个森林,边权为1,支持以下两种操作   1 x y\texttt{1 x y}1 x y 若节点x和节点y不在同一个连通块内,你需要在节点x所在连通块和节点y所在的连通块中分别找一个点,连接一条边权为1的边,使得最终的连通块内的直径尽量长。   2 x\texttt{2 x}2 x 输出节点x所在连通块中的直径长度。...

linjiayang2016的博客 386

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Codeforces 455C Civilization(并查集+dfs)

" 题目链接:Codeforces 455C Civilization 题目大意:给定N,M和Q,N表示有N个城市,M条已经修好的路,修好的路是不能改变的,然后是Q次操作,操作分为两种,一种是查询城市x所在的联通集合中,最长的路为多长。二是连接两个联通集合,采用联通之后最长路最短的方案。 解题思路:因为一开时的图是不可以改变的,所以一开始用dfs处理出各个联通集合,并且记录住最大值,然后就是

u3f1z9ri的专栏 158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

codeforces 455C Civilization

C. Civilization time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Andrew plays a game called "Civilization". D

t_xliang的专栏 803

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Codeforces 455C Civilization

题意:给你一个森林,有q个操作,操作分两种 1)询问节点x所在树的最长链。 2) 将x所在和y所在的树用一条边连起来且使得这颗新树的最长边最短。(在一起不用连) 解题思路:其实这个算法主要的瓶颈就是在合并两颗树上面使得这个新树最长边最短,这里我们考虑到,我们并没有破坏两颗树的结构 ,所以 它们内部的最长边还是保持的。 那么最长边的唯一不确定性是来自于连接两颗树的链, 怎么样使得这条链所在的最...

weixin_30609331的博客 109

Codeforces 455C Civilization:树的直径 + 并查集【合并树后直径最小】

题目链接:http://codeforces.com/problemset/problem/455/C 题意:   给你一个森林,n个点,m条边。   然后有t个操作。共有两种操作:     (1)1 x:       输出节点x所在树的直径。     (2)2 x y:       如果x,y不在同一棵树上的话,用一条边连接x,y所在的树,并且使得到的新树的直径尽可能小。...

a1392136的博客 326

Codeforces 455C —— Civilization(并查集,树上最长链)

题目:C. Civilization Codeforces

hongrock的专栏 978

CodeForces 455C Civilization (并查集+树的直径)

Civilization 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/B Description Andrew plays a game called "Civilization". Dima helps him. The game has n cities and m bidirectional roads. ...

dituonian8372的博客 205

codeforces 455C Civilization 树的最长链+并查集

题意: 给定n个城市和m个道路,在同一个连通

catfish的专栏 524

Codeforces 455C Civilization 树的直径+并查集

题目链接:点击打开链接 题意: 给定n个点 m条无向边的图 k个询问 无重边、自环、环 定义 2个点属于同国家:当这两个点连通时即这两个点是属于一个国家 操作1 x:输出x所在的国家内的最长路长度 操作2 x y:若x y属于一个国家 则忽略 若不属于一个国家,则联合这两个国家(2个集合间连一条边。使得连完后最长路最短) 连2个集合的最长路一定是 找2...

weixin_30279751的博客 4950

Codeforces455 C. Civilization(并查集,树直径)

题意: 给出一个由n个点,m条边组成的森林,俩种类型共k次操作。 类型一:给出点 x,输出点x所在的树的直径的大小。 类型二:给出点 x,y(如果x,y在同一棵树中则忽略此操作),在x所在树种选一个结点,在y所在的树选择一个结点,连接这两个结点,要求使生成的树的直径最小。 保证不会有重复的边。 数据范围:1<=n<=3e5,0<=m<=n-1,1<=k<=3e5 ...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 468

Codeforces 455C. Civilization (树的直径+并查集)

题目描述传送门题目大意: (1)询问x所在连通块的最长链 (2)将x,y所在的连通块合并,任意两个点之间可以连边,使合并后连通块的最长链最短。题解比较容易想到的是连接的两个点是两棵树的中心(最长链的中点)。 关键是连接后的树中点是否会改变呢?答案是连接后的中心是两棵树中最长链较长的树的中心。 那么我们把一个连通块的代表元素维护成树的中心,在这个点动态维护经过这个点子树中的最长链和次长链。

clover_hxy的博客 474

【树的直径+并查集】 codeforces 455C - Civilization

先预处理出

yysys 624
上一篇: Codeforces799C. Fountains
下一篇: 570D - Tree Requests
OneDay_pyf
博客等级 码龄10年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值