#4637. 樱符「完全墨染的樱花」
题目描述
暂无
数据范围
暂无
题解
考虑到这张图是仙人掌,即一条边最多属于一个简单环。
要求两点间的最大流,即求最小割,那要割的要么是桥边,要么是两条环边。
考虑到如果删去的是环边的话,那一定会删掉边权最小的边。
所以可以把每个环的最小的边删去,同时其他边加上这条边的权值,这样两点间的最小割不会改变,进而只要求一棵树的两点间的最小割即可。
所以用并查集维护即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5,P=998244353;
int n,m,p,t,hd[N],V[N],nx[N],W[N],f[N];
int a[N],b[N],fa[N],d[N],g[N],Q,ans,G;
bool vis[N];struct E{int u,v,w;}e[N],q[N];
bool cmp(E A,E B){return A.w>B.w;}
int get(int x){return f[x]==x?x:f[x]=get(f[x]);
}
int X(int x){return x>=P?x-P:x;}
int K(int x,int y){int z=1;for (;y;y>>=1,x=1ll*x*x%P)if (y&1) z=1ll*z*x%P;return z;
}
void add(int u,int v,int i){nx[++t]=hd[u];V[hd[u]=t]=v;W[t]=i;
}
void dfs(int u,int fr){d[u]=d[fa[u]=fr]+1;for (int i=hd[u];i;i=nx[i])if (V[i]!=fr) g[V[i]]=W[i],dfs(V[i],u);
}
int main(){cin>>n>>m>>p;for (int i=1;i<=m;i++)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sort(e+1,e+m+1,cmp);for (int i=1;i<=n;i++) f[i]=i;for (int u,v,i=1;i<=m;i++){u=get(e[i].u);v=get(e[i].v);if (u==v) q[++Q]=e[i];else add(e[i].u,e[i].v,i),add(e[i].v,e[i].u,i),f[v]=u;}dfs(1,0);for (int u,v,i=1;i<=Q;i++){u=q[i].u;v=q[i].v;if (d[u]<d[v]) swap(u,v);while(d[u]>d[v]) e[g[u]].w+=q[i].w,u=fa[u];while(u!=v)e[g[u]].w+=q[i].w,u=fa[u],e[g[v]].w+=q[i].w,v=fa[v];}sort(e+1,e+m+1,cmp);for (int i=1;i<=n;i++)f[i]=i,a[i]=K(p,i),b[i]=K(p,1ll*(i-1)*n%(P-1));for (int u,v,i=1;i<=m;i++){u=get(e[i].u);v=get(e[i].v);if (u==v) continue;ans=X(ans+1ll*(1ll*a[u]*b[v]%P+1ll*a[v]*b[u]%P)*e[i].w%P);a[u]=X(a[u]+a[v]);b[u]=X(b[u]+b[v]);f[v]=u;}printf("%d\n",ans);return 0;
}
#4637. 樱符「完全墨染的樱花」相关推荐
- [COGS2653]源符「厌川的翡翠」-网络流
源符「厌川的翡翠」 题目更新: 现在第13,14,15,16组数据满足m=n-1 所有整数都是正整数 第7,8,9,10,11,12组数据的范围更改为:n,t<=40, m<=50 已添加 ...
- 抓住「金九银十」的尾巴!技术面试如何准备,谷歌面试官亲授
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源@新智元 [导读]有位外国小哥在自己的博客上通过解答一道面试题,发布了自己在谷歌担任工程师和面试官 ...
- define定义的函数如何引用_「C与指针心得」25.预处理器-宏函数
感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章 上一节讲了一些系统的预定义宏,这一节来讲一讲 宏定义.宏函数. 预处理常量 define: 预处理器指令从#开始,到最后第一个换行符为 ...
- 「从 Windows 到 macOS」快速理顺两大系统之间的差异
虽然从熟悉的平台转移到另一个陌生平台的做法一般不会经常发生,但如果你已经决定从 Windows 转移到 macOS,那么在踏入「新世界」的大门之前,或许这份「从 Windows 到 macOS」的入门 ...
- HTML5 活动宣传页「My Flyme 独家记忆」开发实践总结
年前放假的最后一天,我们上线了「My Flyme 独家记忆」 H5 活动宣传页. 因种种原因,直到放假前几天,才突然要求我们参与并开始项目的前端部分.此时大概的情况是:所有数据已计算完毕:后端接口已完 ...
- 6.S081「Xv6 and Unix utilities」
6.S081「Xv6 and Unix utilities」 insorker 2022/2/21 Hello 新学期,新气象,祝看到这篇文章的人一生不患腱鞘炎. Introduction This ...
- 「Python爬虫系列讲解」二、Python知识初学
本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...
- 如何设计 Web App 应用架构?「两分钟了解 IOING」
IOING 在做些什么? IOING 在你的代码和浏览器之间架设了一个中间解释层,该解释层提供了一套新的语法来填补浏览器所不具备的能力. SPA 开发痛点 开发一个 SPA 应用的痛点是不同模块页面的 ...
- 「动手学深度学习」在B站火到没谁,加这个免费实操平台,妥妥天花板!
论 AI 圈活菩萨,非李沐老师莫属. 前有编写「动手学深度学习」,成就圈内入门经典,后又在B站免费讲斯坦福 AI 课,一则艰深硬核讲论文的视频播放量36万,不少课题组从导师到见习本科生都在追番. 如此 ...
最新文章
- 清华 NLP 团队推荐:必读的77篇机器阅读理解论文
- Linux下远程桌面连接windows
- OpenSolaris北京用户组的第一次活动
- (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
- 华北水利水电C 语言实验11,华北水利水电大学C语言实验11.doc
- C语言CRC32 逆向算法源码
- django解决使用DateTimeField添加、修改记录时不动态更新时间的问题
- jquery内容选择器
- 【转】Unity 对象池(Object Pooling)理解与简单应用
- Ubuntu18.04 安装 网易云音乐 解决 打不开的问题
- 元宇宙虚拟人迎来高峰期,哪个是你的最爱?
- 如何进行自动驾驶算法开发
- java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
- 西部数据绿盘、蓝盘、黑盘、红盘和紫盘有什么区别
- 单页双曲面 matlab,matlab绘制单叶双曲面
- Python-字典学习
- KDevelop详细Debug教程
- 加载elementor时出现问题_禁止elementor插件加载谷歌字体
- JSFuck奇葩的js编码
- gvim【二】【ab命令快速制作verilog模板】
热门文章
- 去哪儿网抢火车票方法
- 戴尔页面计算机怎么创建快捷方式,Dell笔记本电脑怎么Fn功能快捷键?
- 高三毕业生如何自学软件工程_经过四个月的自学,我如何获得软件工程实习生...
- 浅谈美式与日式角色扮演游戏的差异与融合
- BZOJ 4976: 宝石镶嵌 背包
- 公司企业邮箱和域名邮箱有什么区别吗?
- 我做过淘宝、京东和微商,为何要再做一个小程序商城?
- 万亿市场爆发,机械制造业电商该如何破局
- mybase7.3.5试用到期解决方法
- 理科爱好者杂志理科爱好者杂志社理科爱好者编辑部2022年第6期目录