luogu P2194 HXY烧情侣
残忍的题面
我们来看这一道题,其实冗长的题目告诉我们一个核心——用tarjan
tarjan是用来干什么呢?是用来求强连通分量(代码中指sc)
求出来又有什么用呢?每当我们求出一个强连通分量时,就去计算当前强连通分量中各点最小值是多少以及其个数
然后分别开两个计数器,假设ans1是用来存个数相乘,ans2是用来累加最小值的。
临门一脚,千万别忘了取% 另外注意如果小伙伴这样和我一样写tarjan的话
for(int i=head[x];i!=-;i=e[i].next)
一定记住,在main函数里要
memset(head,-,sizeof(head));
(看本蒟蒻的代码,大神勿喷)
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+;
#define ll long long
#define inf 1e9
const int N = ;
const int M = ;
int head[M],v[M],dfn[M],low[M],q[M];
int be[M],sum[M],hh[M],num[M];
int ss,n,m,now,cnt,tot,sc;
ll ans1=,ans2;
bool f[N];
struct Edge{
int to,next;
}e[N];
void add(int x,int y)
{
e[++ss].to=y;
e[ss].next=head[x];
head[x]=ss;
}
void dfs(int x)//这里的dfs和下面tarjan分着写的,不管怎样都是tarjan模板
{
low[x]=dfn[x]=++cnt;
q[++tot]=x;
f[x]=;
for(int i=head[x];i!=-;i=e[i].next)
{
if(!dfn[e[i].to])
{
dfs(e[i].to);
low[x]=min(low[x],low[e[i].to]);
}
else
if(f[e[i].to])
low[x]=min(low[x],dfn[e[i].to]);
}
if(low[x]==dfn[x])
{
sc++;
be[x]=sc;
hh[sc]=inf;
do
{
now=q[tot--];
f[now]=;
be[now]=sc;
if(v[now]<hh[sc])
{
hh[sc]=v[now];
num[sc]=;
}
if(v[now]==hh[sc]) num[sc]++;
}
while(now!=x);
}
}
void tarjan()
{
for(int i=;i<=n;i++)
if(!dfn[i]) dfs(i);
}
int main()
{
memset(head,-,sizeof(head));
cin>>n;
for(int i=;i<=n;i++)
cin>>v[i];
cin>>m;
for(int i=;i<=m;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
}
tarjan();
for(int i=;i<=sc;i++)//最后的处理,ans1别忘初值为1
{
ans1*=num[i];
ans2+=hh[i];
ans1%=mod;
}
cout<<ans2<<" "<<ans1;
return ;
}
luogu P2194 HXY烧情侣的更多相关文章
- 【luogu P2194 HXY烧情侣】 题解
题目链接:https://www.luogu.org/problemnew/show/P2194 第一问:缩点并且统计其强连通分量里的最小耗费.把所有强连通分量的最小耗费加起来. 第二问:统计在每个强 ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- 洛谷P2194 HXY烧情侣
题目描述 众所周知,\(HXY\)已经加入了\(FFF\)团.现在她要开始喜\((sang)\)闻\((xin)\)乐\((bing)\)见\((kuang)\)地烧情侣了.这里有\(n\)座电影院, ...
- P2194 HXY烧情侣【Tarjan】
前言 当时和\(GYZ\)大佬一起做这个题,他表示这个题对他很不友好(手动滑稽) 题目描述 众所周知,\(HXY\) 已经加入了 \(FFF\) 团.现在她要开始喜(sang)闻(xin)乐(bing ...
- HXY烧情侣(洛谷 2194)
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- HXY烧情侣
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- 洛谷P2194 【HXY烧情侣】
首先请允许我吐槽一下这个题面 这个题面透露出血腥与暴力,电影院里还藏汽油 所以情侣们,要是想看电影就在家里看吧 毕竟出来容易被烧 在家里看虽然观影效果不如在电影院里 但是, 起码咱生命安全啥的有保障啊 ...
- 【luogu P2195 HXY造公园】 题解
题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...
- 洛谷P2194HXY烧情侣
传送门啦 这个题可以说是tarjan强连通分量的裸题,但需要维护每个强连通分量的最小值,所以做法就很明确了. 我们先明确几个数组的意思: 1.首先是tarjan缩点中的几个数组: dfn[i]:i点的 ...
随机推荐
- 利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件
博客地址:https://ainyi.com/65 解释 | 背景 看到标题有点懵逼,哈哈,实际上是后端将文件处理成二进制流,返回到前端,前端处理这个二进制字符串,输出文件或下载 最近公司有个需求是用 ...
- 小tips:你不知道的 npm init
前言 在现代新建一个 JS 相关的项目往往都是从 package.json 文件开始的,不过这个文件里需要的字段实在是太多了,正常人都记不住,所以 npm 官方提供了 npm init 命令帮助我们快 ...
- CSS 三条横线等分
.header_qian { width: 1.5rem; height: 1.5rem; background: rgba(250, 250, 250,0.7); border-radius: 50 ...
- react异步加载组件
1. 创建 asyncComponent 异步加载工具 import React from 'react' function asyncComponent(loadComponent){ class ...
- DevExtreme App 开发记要
添加插件 除提供的标准插件外,可直接在config.xml中书写配置,然后编译模板,在后台能看到相关的插件了 无法显示百度地图 在IPHONE中正常加载地图,但在安卓中提示BM ...
- 一、Snapman多人协作电子表格之——Snapman自我介绍
一.Snapman系统介绍 Snapman是一个真正现代化的电子表格系统:QQ是即时通讯软件,那Snapman就是一个即时工作系统. 微软CEO纳德拉说:Excel才是微软最伟大的产品,Excel将所 ...
- ElasticSearch head 插件安装
head 客户端可以很方便在上面创建索引,类型,文档,还有查询,使用它管理elasticsearch 提高效率. 在安装head 客户端之前必须安装node.js 环境,因为它是用node.js 编写 ...
- 解决OracleOraDb10g_home1TNSListener服务无法启动
造成OracleOraDb10g_home1TNSListener服务无法启动可能有三种情况: listener.ora文件配置有错误导致无法启动 相关环境变量没设置好 删除客户端时导致服务端相关注册 ...
- 如何快速清理 docker 资源
如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用.本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无 ...
- Redis笔记-Sentinel哨兵模式
Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...