题目描述

暂无

数据范围

暂无

题解

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

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

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

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

所以用并查集维护即可。

代码

#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. url 百分号 解码
  2. flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?
  3. 自定义控件之-----progressBar
  4. 自定义Android带图片的按钮
  5. ubuntu改变进程优先级从而防止卡
  6. SetConsoleCtrlHandler() -- 设置控制台信号处理函数
  7. [VNC] 云服务器 Ubuntu 配置 VNC 遇到的问题
  8. 如何高效并快速的掌握NLP与深度学习路径?来公众号寻找经验吧~
  9. php 获取TZ时间格式
  10. .NET高性能编程 - C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
  11. Graphene图数据建模工具
  12. 微服务网关之Springcloud GateWay
  13. 词法语法分析器EDG C++
  14. 全网把Map中的hash()分析的最透彻的文章,别无二家
  15. Android 关于所谓的 深度睡眠 的问题
  16. 维谛(Vertiv)培训中心迁新址,再攀培训业务新高峰
  17. Scala的安装与配置
  18. Excel日期按秒自增公式
  19. 【Ngnix】Ngnix应用
  20. 1005:地球人口承载力估计(C C++)

热门文章

  1. 细数霍金关于AI的五大预言,向伟大的科学巨人致敬
  2. 【Pygame小游戏】这款“吃掉一切”游戏简直奇葩了?通通都吃掉嘛?(附源码免费领)
  3. WCF通过配置文件搭建—— 一起嗨
  4. 10情态动词(3):分类
  5. 处理textarea换行问题
  6. 用python海龟画图_Python 海龟作图的问题
  7. 《精通linux设备驱动程序开发》——PCMCIA和CF
  8. 揭密玄学奥秘(二):同时辰出生的人命运为什么不一样?
  9. 项目总结:石头剪刀布小游戏
  10. linux控制风扇转速的命令,sensors命令_Linux sensors 命令用法详解:sensors命令获得设备的温度和风扇转速...