10.03模拟赛t3

news/2025/10/3 17:01:43/文章来源:https://www.cnblogs.com/needna/p/19124755

CF475E Strongly Connected City 2

题目描述

想象有一座城市,这座城市有 \(n\) 个路口和 \(m\) 条街道。路口编号从 \(1\)\(n\)

为了提高交通流量,市长决定将每条街道改为单行道。这意味着在连接路口 \(u\)\(v\) 的街道上,交通只能从 \(u\)\(v\),或只能从 \(v\)\(u\) 单向通行。

现在的问题是,需要为这些街道指定单向通行的方向,使得能够到达的点对 \((u, v)\) 的数量最大,其中 \(1 \le u, v \le n\),且要求从 \(u\) 出发经过指定方向的街道能够到达 \(v\)。你的任务是找出最大可能的此类点对数量。

题解:

先大概猜猜,发现一个简单的性质,对于一个环,一定满足全部都一个方向最优秀。

所以我们先做一个 tarjan。点权为环的点数。然后发现贪心不大行,考虑 dp

这个时候还要一个性质,对于最优解。就是在只在重心上,能满足其一部分子树的所有点能到达他,其他点都可以从他到达。

证明:

考虑有一个小联通快所有边的方向与其他不同,那么发现把这个所有边全部翻转过来,答案一定变大,因为重心一侧的点至少为所有点的一半。

这下就可以 dp 了。我们把重心作为根,考虑每个点的贡献是多少:

  • (除 \(root\))自己 \(\times\) 自己的子树和

  • 通过重心的到达另一端

其实就是要判断那些子树进入,那些子树要出去。

我们发现第一个贡献不论怎么分配都是一样的。

第二个贡献实际上是一个数学问题:设你进入的节点总数为 \(x\),重心点权为 \(y\) 另一侧点的数量和为 \(z\)。那么有答案为 \((x+y)\times (y+z)\)

那其实就是要找到每一个 \(x\) 能不能被表示出来,这是一个典型的 01背包 直接做复杂度 \(O(n^2)\)bitset 维护的话是 \(\frac{n^2}{w}\) 的。

code:

#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=2e5+10;
int n,m,k,T,a[N],vis[N],dfn[N];
int low[N],tot,col,scc[N],siz[N];
int rt,mx=INT_MAX,sz[N],ans,sum;
vector<int> g[N],g1[N];
stack<int> st;
void tar(int u,int fa){dfn[u]=low[u]=++tot;vis[u]=1;st.push(u);for(int v:g[u]){if(v==fa) continue;if(!dfn[v]){tar(v,u);low[u]=min(low[u],low[v]);}else if(vis[v]) low[u]=min(low[u],dfn[v]);}if(low[u]==dfn[u]){col++;while(1){int t=st.top();st.pop();scc[t]=col;vis[t]=0;siz[col]++;if(t==u) break;}}
}
void getrt(int u,int fa){sz[u]=siz[u];int res=0;for(int v:g1[u]){if(v==fa) continue;getrt(v,u);sz[u]+=sz[v];res=max(res,sz[v]);}res=max(res,n-sz[u]);if(res<mx) mx=res,rt=u;
}
void dfs(int u,int fa){sz[u]=siz[u];for(int v:g1[u]){if(v==fa) continue;dfs(v,u);sz[u]+=sz[v];}if(fa)sum+=siz[u]*sz[u];
}
bitset<N> s; 
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m;rep(i,1,m){int u,v;cin>>u>>v;g[u].pb(v);g[v].pb(u);}tar(1,0);rep(i,1,n){for(int v:g[i]){if(scc[i]!=scc[v]){g1[scc[i]].pb(scc[v]);}}}rt=0;getrt(1,0);dfs(rt,0);s[0]=1;if(g1[rt].size()==n-1){cout<<1ll*((n-1)/2)*(n-((n-1)/2))+(n-((n-1)/2)-1)+n;return 0;	}for(int v:g1[rt]){s=s|(s<<sz[v]);}rep(i,0,n){if(s[i]==1){ans=max(ans,(i+siz[rt])*(n-i));}}cout<<ans+sum;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国庆梦熊集训做题记录

炼石计划T1:https://www.cnblogs.com/yanbinmu/articles/19122547 T2:https://www.cnblogs.com/yanbinmu/articles/19122718D3 作业 A. 关于整除分块 B. 题解:ABC192F Potion 最开始的想法遍历 k 判断可行,然后再想办…

网站ip查询福建 专业网站建设公司

(1).局部组件的使用 ​ 渲染组件-父使用子组件 1: 创建子组件(对象) var Header { template:模板 , data是一个函数,methods:功能,components:子组件们 } 2: 在父组件中声明,根属性components:{ 组件名:组件对象 }3: 在父组件要用的地方使用 <组件名></组件名> …

完整教程:缓存总线是什么?

完整教程:缓存总线是什么?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

兰博平台: 星云抽卡豪华版. 作者acc177

兰博平台: 星云抽卡豪华版. 作者acc177爽图一个. 开局抽奖. 一个运输船到处吃箱子 抽到刷钱的矿车之后, 刷建筑. 刷到终极谭雅就通了. 终极谭雅配合复制中心, 一次几十万. 爽图一个.

企业网站建设立项报告推广下载app

文章目录 静态绑定动态绑定多态的具体实现向上转型多态的优缺点抽象类抽象类的作用 总结 静态绑定 重载就是典型例子 动态绑定 多态的具体实现 //多态 class Animal{public String name;public int age;//无参构造方法public Animal() {}//有参构造方法public Animal(Strin…

沈阳网站建设 网络服务公司网站怎么做推广

bind绑定类内成员导致 "no matching function for call to ..." 当bind绑定类内成员时&#xff0c;需要指明绑定的成员所在类的位置。 上面未指明Remove函数在哪个类中从而导致错误。 此外 bind 的函数指针类型是const类型的&#xff0c;都需要添加 const 修饰。 S…

中山建设局网站最新事故案例100例

小抄,答案,形成性考核册,形成性考核册答案,参考答案,小抄资料,考试资料,考试笔记第一套1.程序填空程序通过定义学生结构体数组&#xff0c;存储了若干个学生的学号、姓名和三门课的成绩。函数fun 的功能是将存放学生数据的结构体数组&#xff0c;按照姓名的字典序(从小到大排序…

打工人日报#20250927 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

GPT-5 撼动量子计算:AI 在科研领域的颠覆性应用 - 实践

GPT-5 撼动量子计算:AI 在科研领域的颠覆性应用 - 实践2025-10-03 16:50 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

python 肘部法则,判点聚类分为几类,K-means聚类分析

想给N、R、Z、W做K-means聚类分析,首先看看分成几类,用肘部法则:#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: zhoubufaze.py @time: 2025/10/03 @desc: 肘部法则确定最…

AT_abc315_f [ABC315F] Shortcuts

首先朴素 DP 是记录 \(f_{i, j}\) 表示到了第 \(i\) 个点跳了 \(j\) 个点的最小代价。 发现如果 \(j\) 过大 \(2^j\) 直接爆了,于是只枚举 \(j \le 30\) 的部分即可。

紫外UV固化太阳光模拟器的原理 - 教程

紫外UV固化太阳光模拟器的原理 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

《系统与软件工程功能规模测量IFPUG手段》(GB/T42449-2023)标准解读

《系统与软件工程功能规模测量IFPUG手段》(GB/T42449-2023)标准解读pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

实用指南:无人机图传及组网功能如何实现?适用频段与传输模块选择全攻略

实用指南:无人机图传及组网功能如何实现?适用频段与传输模块选择全攻略2025-10-03 16:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…

福州企业网站建设专业服务威海住房和城乡建设局官方网站

很多时候&#xff0c;我们需要用python画图&#xff0c;这样就可以更加直观的看到数据的走势&#xff0c;而不是干巴巴的数字。今天&#xff0c;我们就给大家整理了一下python画图的常用函数&#xff0c;由于篇幅限制。无法将这些函数的使用方法全部表现出来。所以&#xff0c;…

P5709 【深基2.习6】Apples Prologue / 苹果和虫子

题目详细解释 问题背景分析:小B在连续不断地吃苹果,没有任何休息时间吃完一个苹果后立即开始吃下一个苹果我们需要计算在给定的时间内,还剩下多少个完全没有被吃过的苹果关键概念理解:完整的苹果:完全没有被咬过、…

问题表 - microsoft

题目表CREATE TABLE [dbo].[Questions]( [id] [int] IDENTITY(1,1) NOT NULL, [cate] [int] NOT NULL, [type] [varchar](50) NULL, [dep] [varchar](100) NULL, [question] [varchar](1000) NULL, [KeyA] [varchar](5…

机械加工外协网站2345电脑版

【51CTO精选译文】本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的数据&#xff0c;并测量目前哪些数据所传输的速度。入站流量和出站流量分开来显示。一些命令可以显示单个进程所使用的带宽。这样一来&#xff0c;用户很容易发…

怎么制作网站app建网上商城的第三方网站哪个好

提到互联网系统设计&#xff0c;可能听到最多的词就是“三高”&#xff0c;也就是“高并发”“高性能”“高可用”&#xff0c;它们是互联网系统架构设计永恒的主题。这里将整体探讨下高并发系统设计的目标&#xff0c;然后在此基础上&#xff0c;探讨下&#xff1a;如何提升系…

三合一网站cms泉州建站模板

DeepSeek与VScode的强强联合&#xff0c;为编程效率树立了新标杆。 DeepSeek&#xff0c;一款卓越的代码搜索引擎&#xff0c;以其精准的索引和高速的检索能力&#xff0c;助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后&#xff0c;开发者无需离开熟悉的编辑…