先求出任意一棵最小生成树,然后对边分类讨论
1.非树边,答案即最小生成树的环上的最长边
2.树边,反过来考虑,相当于对于每一个点对那条路经打上标记,取min
对于1直接用倍增维护即可,对于2可以用树链剖分/差分+启发式合并但都需要两个log,所以有一种很神奇的做法
考虑从小到大枚举非树边,然后暴力修改,容易发现修改过的边就不用修改了,因此复杂度是o(m),问题是如何快速找到没有被修改过的边,可以使用并查集将修改过的边缩起来然后快速往上爬即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define mid (l+r>>1)
5 struct ji{
6 int x,y,z,id;
7 }e[N*10];
8 struct ji2{
9 int nex,to,len,id;
10 }edge[N<<1];
11 int E,n,m,x,y,head[N],sh[N],ff[N],up[N],vis[N*10],ans[N*10],f[N][21],mx[N][21];
12 bool cmp(ji x,ji y){
13 return x.z<y.z;
14 }
15 int find(int k){
16 if (k==ff[k])return k;
17 return ff[k]=find(ff[k]);
18 }
19 void add(int x,int y,int z,int id){
20 edge[E].nex=head[x];
21 edge[E].to=y;
22 edge[E].len=z;
23 edge[E].id=id;
24 head[x]=E++;
25 }
26 void dfs(int k,int fa,int id,int s){
27 sh[k]=s;
28 up[k]=id;
29 f[k][0]=fa;
30 for(int i=1;i<=20;i++){
31 f[k][i]=f[f[k][i-1]][i-1];
32 mx[k][i]=max(mx[k][i-1],mx[f[k][i-1]][i-1]);
33 }
34 for(int i=head[k];i!=-1;i=edge[i].nex)
35 if (edge[i].to!=fa){
36 mx[edge[i].to][0]=edge[i].len;
37 dfs(edge[i].to,k,edge[i].id,s+1);
38 }
39 }
40 pair<int,int> lca(int x,int y){
41 if (sh[x]<sh[y])swap(x,y);
42 int ans=0;
43 for(int i=20;i>=0;i--)
44 if (sh[f[x][i]]>=sh[y]){
45 ans=max(ans,mx[x][i]);
46 x=f[x][i];
47 }
48 if (x==y)return make_pair(x,ans);
49 for(int i=20;i>=0;i--)
50 if (f[x][i]!=f[y][i]){
51 ans=max(ans,max(mx[x][i],mx[y][i]));
52 x=f[x][i];
53 y=f[y][i];
54 }
55 return make_pair(f[x][0],max(ans,max(mx[x][0],mx[y][0])));
56 }
57 int main(){
58 scanf("%d%d",&n,&m);
59 for(int i=1;i<=m;i++){
60 scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);
61 e[i].id=i;
62 }
63 sort(e+1,e+m+1,cmp);
64 memset(head,-1,sizeof(head));
65 for(int i=1;i<=n;i++)ff[i]=i;
66 for(int i=1;i<=m;i++){
67 x=find(e[i].x);
68 y=find(e[i].y);
69 if (x!=y){
70 ff[x]=y;
71 add(e[i].x,e[i].y,e[i].z,e[i].id);
72 add(e[i].y,e[i].x,e[i].z,e[i].id);
73 vis[i]=1;
74 }
75 }
76 dfs(1,0,0,0);
77 for(int i=1;i<=m;i++)ans[i]=1000000000;
78 for(int i=1;i<=n;i++)ff[i]=i;
79 for(int i=1;i<=m;i++)
80 if (!vis[i]){
81 x=lca(e[i].x,e[i].y).first;
82 ans[e[i].id]=lca(e[i].x,e[i].y).second;
83 while (find(e[i].x)!=find(x)){
84 e[i].x=find(e[i].x);
85 ans[up[e[i].x]]=e[i].z;
86 if (find(e[i].x)!=find(f[e[i].x][0]))ff[find(e[i].x)]=find(f[e[i].x][0]);
87 }
88 while (find(e[i].y)!=find(x)){
89 e[i].y=find(e[i].y);
90 ans[up[e[i].y]]=e[i].z;
91 if (find(e[i].y)!=find(f[e[i].y][0]))ff[find(e[i].y)]=find(f[e[i].y][0]);
92 }
93 }
94 for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
95 }

[cf1184E]Daleks' Invasion的更多相关文章

  1. CF E2 - Daleks' Invasion (medium) (LCA求两点树上路径上的最大边权)

    http://codeforces.com/contest/1184/problem/E2 题意:给出一副图,首先求出这幅图的最小生成树 , 然后修改这幅图上不属于最小生成树的边权,使得修改后的图在求 ...

  2. 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

    3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 8 ...

  3. python编程从入门到实践 alien invasion 项目源码

    现在上传一个 python编程从入门到实践 alien invasion 项目源码 以供大家学习参考 跟官方版本可能不太一样,因为是自己写的 也算是给新手一个参考 我用的环境是pycharm 可能需要 ...

  4. 【学习笔记】《Python从入门到实践》游戏-Alien Invasion

    主模块alien_invasion.py #导入两个库 2 from settings import Settings from ship import Ship import game_functi ...

  5. Multiclonal Invasion in Breast Tumors Identified by Topographic Single Cell Sequencing

    Title:  Multiclonal Invasion in Breast Tumors Identified by Topographic Single Cell Sequencing 课题的目的 ...

  6. 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed

    P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...

  7. UVA 6480 Zombie Invasion(模拟退火)

    A group of survivors has arrived by helicopter to an isolated island. The island is made up of a lon ...

  8. 2018 Benelux Algorithm Programming Contest (BAPC 18)I In Case of an Invasion, Please. . .

    题意:一副无向有权图,每个点有一些人,某些点是避难所(有容量),所有人要去避难所,问最小时间所有人都到达避难所, 题解:dij+二分+最大流check,注意到避难所最多10个,先挨个dij求到避难所的 ...

  9. 每日英语:The Invasion of the Online Tutors

    It's a nightly dilemma in many households: A student hits a wall doing homework, and parents are too ...

随机推荐

  1. MSSQL还原数据库,更改用户登陆权限

    有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...

  2. 题解 [PA2019]Trzy kule

    link Description 对于两个长度为 \(n\) 的 \(01\) 串 \(a_1,a_2,\dots,a_n\) 和 \(b_1,b_2,\dots,b_n\),定义它们的距离 \(d( ...

  3. 『Mivik的萌新赛 & Chino的比赛 2020』T2 题解 Galgame

    如果这是我最后一篇题解,请每年为我上坟. Galgame 题目传送门 Decription as_lky 搞到了很多 Galgame(真的很多!).一款 Galgame 可以被描述为很多场景(Scen ...

  4. CAD/DWG图Web网页可视化技术之栅格和矢量瓦片

    背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,实现CAD/DWG图形Web展示的思路一般为解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojso ...

  5. 使用tinypng对需要上传Gitee图床的图片进行压缩

    目录 背景 Tinypng简介 Tinypng使用 手动上传图片 使用API 调用API自动上传超过1MB图片 安装tinyfy 自动上传脚本 其他 背景 在使用Gitee作为图床时(使用Typora ...

  6. FastAPI 学习之路(二十七)安全校验

    你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...

  7. vue.$set实现原理

    上源码: export function set (target: Array<any> | Object, key: any, val: any): any { if (process. ...

  8. JavaScript05

    显示和隐藏 元素的显示和隐藏 元素display属性可控制元素的显示和隐藏,先获取元素对象,再通过点语法调用style对象中的display属性 语法格式: 元素.style.display='non ...

  9. 阿里大神favoorr提供的书单

     Thoughtwoks中国的推荐书单 <http://www.douban.com/doulist/2012097/ >新浪微博-秦迪 <http://blog.2baxb.me/ ...

  10. the Agiles Scrum Meeting 12

    会议时间:2020.4.20 21:00 1.每个人的工作 今天已完成的工作 个人结对项目增量开发组: 自动评测系统基本开发完成,实现个人项目自动评测功能 issues: 个人结对功能开发组:开发自动 ...