题目链接

  • 题意:

    n个点,m条边的森林。q次操作。

    每次操作:1、询问x所在树的直径 2、合并x和y所在的树,使得合并后的直径最小

    (1 ≤ n ≤ 3·105; 0 ≤ m < n; 1 ≤ q ≤ 3·105)

  • 分析:

    没有读到图是森林。。

    。做的好纠结

    最開始将每一个树都求一下直径,之后使用并查集处理。每次合并直径:至少是两个树的直径,或者将两个直径的最中间的部分连接求直径

const int MAXN = 310000;

int rt[MAXN], ans[MAXN];
VI G[MAXN];
bool vis[MAXN]; void init(int n)
{
REP(i, n)
{
vis[i] = false;
ans[i] = 0;
G[i].clear();
rt[i] = i;
}
} int find(int n)
{
return n == rt[n] ? n : rt[n] = find(rt[n]);
} void merge(int a, int b)
{
int fa = find(a), fb = find(b);
if (fa != fb)
{
rt[fa] = fb;
ans[fb] = max(ans[fb], (ans[fb] + 1) / 2 + (ans[fa] + 1) / 2 + 1);
ans[fb] = max(ans[fa], ans[fb]);
}
} int Max, id;
void dfs(int u, int fa, int dep)
{
vis[u] = true;
REP(i, G[u].size())
{
int v = G[u][i];
if (v != fa)
dfs(v, u, dep + 1);
}
if (dep > Max)
{
Max = dep;
id = u;
}
} int main()
{
int n, m, q;
while (~RIII(n, m, q))
{
init(n + 1);
REP(i, m)
{
int a, b;
RII(a, b);
G[a].push_back(b);
G[b].push_back(a);
int fa = find(a), fb = find(b);
rt[fa] = fb;
}
FE(i, 1, n)
{
if (!vis[i])
{
Max = -1;
dfs(i, -1, 0);
Max = -1;
dfs(id, -1, 0);
ans[find(i)] = Max;
}
}
REP(i, q)
{
int op;
RI(op);
if (op == 2)
{
int a, b;
RII(a, b);
merge(a, b);
}
else
{
int a;
RI(a);
WI(ans[find(a)]);
}
}
}
return 0;
}

最新文章

  1. C# unmanaged function pointers for iOS
  2. 【JAVA】Quartz中时间表达式的设置
  3. atitit.重装系统需要备份的资料总结 o84..
  4. strcmp的实现
  5. for循环下九九乘法表
  6. 加密解密(9)Diffie-Hellman密钥交换协议
  7. CODEVS 3943 数学奇才琪露诺
  8. 很受欢迎的Linux笔记(短小精悍)
  9. Joomla插件汉化小程序
  10. ASP.Net请求处理机制初步探索之旅 - Part 1 前奏(转)
  11. CSliderCtrl鼠标点击精确定位
  12. 10分钟精通SharePoint - SharePoint发展历程
  13. plsql经验之谈
  14. Linux定时器工具-crontab 各參数具体解释及怎样查看日志记录
  15. WingIDE 常用快捷键
  16. win7 英文版 中文乱码
  17. thinkphp5 中使用 七牛云 上传图片和文件
  18. C#定义一个方法的3种形式
  19. layui 三级菜单
  20. 好用的SHELL小编程

热门文章

  1. BZOJ 4771 主席树+倍增+set
  2. 关于一些UI的插件(杂)
  3. MapReduce架构与生命周期
  4. 洛谷P2391 白雪皑皑(并查集)
  5. 关于KO信息
  6. Django学习笔记----settings and database_based App demo
  7. JavaScript Math 对象常用方法
  8. jQuery访问json文件
  9. HTML5新特性之文件和二进制数据的操作 Blob对象
  10. Codeforces 789A Anastasia and pebbles( 水 )