题目描述

暂无

数据范围

暂无

题解

考虑到这张图是仙人掌,即一条边最多属于一个简单环。

要求两点间的最大流,即求最小割,那要割的要么是桥边,要么是两条环边。

考虑到如果删去的是环边的话,那一定会删掉边权最小的边。

所以可以把每个环的最小的边删去,同时其他边加上这条边的权值,这样两点间的最小割不会改变,进而只要求一棵树的两点间的最小割即可。

所以用并查集维护即可。

代码

#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. 樱符「完全墨染的樱花」相关推荐

  1. [COGS2653]源符「厌川的翡翠」-网络流

    源符「厌川的翡翠」 题目更新: 现在第13,14,15,16组数据满足m=n-1 所有整数都是正整数 第7,8,9,10,11,12组数据的范围更改为:n,t<=40, m<=50 已添加 ...

  2. 抓住「金九银十」的尾巴!技术面试如何准备,谷歌面试官亲授

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源@新智元 [导读]有位外国小哥在自己的博客上通过解答一道面试题,发布了自己在谷歌担任工程师和面试官 ...

  3. define定义的函数如何引用_「C与指针心得」25.预处理器-宏函数

    感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章 上一节讲了一些系统的预定义宏,这一节来讲一讲 宏定义.宏函数. 预处理常量 define: 预处理器指令从#开始,到最后第一个换行符为 ...

  4. 「从 Windows 到 macOS」快速理顺两大系统之间的差异

    虽然从熟悉的平台转移到另一个陌生平台的做法一般不会经常发生,但如果你已经决定从 Windows 转移到 macOS,那么在踏入「新世界」的大门之前,或许这份「从 Windows 到 macOS」的入门 ...

  5. HTML5 活动宣传页「My Flyme 独家记忆」开发实践总结

    年前放假的最后一天,我们上线了「My Flyme 独家记忆」 H5 活动宣传页. 因种种原因,直到放假前几天,才突然要求我们参与并开始项目的前端部分.此时大概的情况是:所有数据已计算完毕:后端接口已完 ...

  6. 6.S081「Xv6 and Unix utilities」

    6.S081「Xv6 and Unix utilities」 insorker 2022/2/21 Hello 新学期,新气象,祝看到这篇文章的人一生不患腱鞘炎. Introduction This ...

  7. 「Python爬虫系列讲解」二、Python知识初学

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

  8. 如何设计 Web App 应用架构?「两分钟了解 IOING」

    IOING 在做些什么? IOING 在你的代码和浏览器之间架设了一个中间解释层,该解释层提供了一套新的语法来填补浏览器所不具备的能力. SPA 开发痛点 开发一个 SPA 应用的痛点是不同模块页面的 ...

  9. 「动手学深度学习」在B站火到没谁,加这个免费实操平台,妥妥天花板!

    论 AI 圈活菩萨,非李沐老师莫属. 前有编写「动手学深度学习」,成就圈内入门经典,后又在B站免费讲斯坦福 AI 课,一则艰深硬核讲论文的视频播放量36万,不少课题组从导师到见习本科生都在追番. 如此 ...

最新文章

  1. 清华 NLP 团队推荐:必读的77篇机器阅读理解论文
  2. Linux下远程桌面连接windows
  3. OpenSolaris北京用户组的第一次活动
  4. (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
  5. 华北水利水电C 语言实验11,华北水利水电大学C语言实验11.doc
  6. C语言CRC32 逆向算法源码
  7. django解决使用DateTimeField添加、修改记录时不动态更新时间的问题
  8. jquery内容选择器
  9. 【转】Unity 对象池(Object Pooling)理解与简单应用
  10. Ubuntu18.04 安装 网易云音乐 解决 打不开的问题
  11. 元宇宙虚拟人迎来高峰期,哪个是你的最爱?
  12. 如何进行自动驾驶算法开发
  13. java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
  14. 西部数据绿盘、蓝盘、黑盘、红盘和紫盘有什么区别
  15. 单页双曲面 matlab,matlab绘制单叶双曲面
  16. Python-字典学习
  17. KDevelop详细Debug教程
  18. 加载elementor时出现问题_禁止elementor插件加载谷歌字体
  19. JSFuck奇葩的js编码
  20. gvim【二】【ab命令快速制作verilog模板】

热门文章

  1. 去哪儿网抢火车票方法
  2. 戴尔页面计算机怎么创建快捷方式,Dell笔记本电脑怎么Fn功能快捷键?
  3. 高三毕业生如何自学软件工程_经过四个月的自学,我如何获得软件工程实习生...
  4. 浅谈美式与日式角色扮演游戏的差异与融合
  5. BZOJ 4976: 宝石镶嵌 背包
  6. 公司企业邮箱和域名邮箱有什么区别吗?
  7. 我做过淘宝、京东和微商,为何要再做一个小程序商城?
  8. 万亿市场爆发,机械制造业电商该如何破局
  9. mybase7.3.5试用到期解决方法
  10. 理科爱好者杂志理科爱好者杂志社理科爱好者编辑部2022年第6期目录