题目描述

Bessie 的 \(N\)(\(2\le N\le 10^5\))个奶牛伙伴(编号为 \(1\cdots N\))每一个都拥有自己的农场。对于每个 \(1\le i\le N\),伙伴 i 想要访问伙伴 \(a_i\)(\(a_i\neq i\))。

给定 \(1\ldots N\) 的一个排列 \((p_1,p_2,\ldots, p_N)\),访问按以下方式发生。

对于 \(1\) 到 \(N\) 的每一个 \(i\):

  • 如果伙伴 \(a_{p_i}\) 已经离开了她的农场,则伙伴 \(p_i\) 仍然留在她的农场。
  • 否则,伙伴 \(p_i\) 离开她的农场去访问伙伴 \(a_{p_i}\) 的农场。这次访问会产生快乐的哞叫 \(v_{p_i}\) 次(\(0\le v_{p_i}\le 10^9\))。

对于所有可能的排列 \(p\),计算所有访问结束后可能得到的最大哞叫次数。

输入格式

输入的第一行包含 \(N\)。

对于每一个 \(1\le i\le N\),第 \(i+1\) 行包含两个空格分隔的整数 \(a_i\) 和 \(v_i\)。

输出格式

输出一个整数,为所求的答案。

注意这个问题涉及到的整数可能需要使用 64 位整数型(例如,C/C++ 中的 "long long")。

样例 #1

样例输入 #1

4
2 10
3 20
4 30
1 40

样例输出 #1

90

提示

【样例解释】

如果 \(p=(1,4,3,2)\),则

  • 伙伴 \(1\) 访问伙伴 \(2\) 的农场,产生 \(10\) 次哞叫。
  • 伙伴 \(4\) 看到伙伴 \(1\) 已经离开了农场,所以无事发生。
  • 伙伴 \(3\) 访问伙伴 \(4\) 的农场,又产生 \(30\) 次哞叫。
  • 伙伴 \(2\) 看到伙伴 \(3\) 已经离开了农场,所以无事发生。

这样总计得到了 \(10+30=40\) 次哞叫。

另一方面,如果 \(p=(2,3,4,1)\),则

  • 伙伴 \(2\) 访问伙伴 \(3\) 的农场,产生 \(20\) 次哞叫。
  • 伙伴 \(3\) 访问伙伴 \(4\) 的农场,产生 \(30\) 次哞叫。
  • 伙伴 \(4\) 访问伙伴 \(1\) 的农场,产生 \(40\) 次哞叫。
  • 伙伴 \(1\) 看到伙伴 \(2\) 已经离开了农场,所以无事发生。

这样总计得到了 \(20+30+40=90\) 次哞叫。可以证明这是所有可能的排列 \(p\) 中访问结束后得到的最大可能的哞叫次数。

首先很明显这是一颗基环树。

对于每个非环上的点,那头牛都可以先让子树访问完他他在去访问别人。而环上会刚好有一头牛访问不到。

现用拓扑去环,然后对于每个环,选出眸叫次数最少的那头牛,让他不能访问别人即可。

#include<cstdio>
#include<iostream>
const int N=1e5+5;
int a[N],v[N],n,in[N],l=1,r,q[N],ret=1e9;
long long ans,x;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",a+i,v+i),in[a[i]]++,ans+=v[i];
for(int i=1;i<=n;i++)
if(!in[i])
q[++r]=i;
while(l<=r)
{
in[a[q[l]]]--;
if(!in[a[q[l]]])
q[++r]=a[q[l]];
++l;
}
for(int i=1;i<=n;i++)
{
if(in[i])
{
ret=1e9,x=i;
while(in[x])
{
in[x]=0;
ret=std::min(ret,v[x]);
x=a[x];
}
ans-=ret;
}
}
printf("%lld",ans);
return 0;
}

[USACO2022OPENS] Visits的更多相关文章

  1. PV(Pageviews)、访问(Visits)和访问者(Visitors)的区别

    1. 在GA上,每个页面每次加载将被记为一次PV.举例来说,一次用户访问页面顺序为:页面A->页面B->页面A,然后离开了你的站点,那这次用户访问(Visits)的PV总计为3次.   2 ...

  2. P5836 [USACO19DEC]Milk Visits S 从并查集到LCA(最近公共祖先) Tarjan算法 (初级)

    为什么以它为例,因为这个最水,LCA唯一黄题. 首先做两道并查集的练习(估计已经忘光了).简单来说并查集就是认爸爸找爸爸的算法.先根据线索理认爸爸,然后查询阶段如果发现他们的爸爸相同,那就是联通一家的 ...

  3. 【题解】[USACO19DEC]Milk Visits G

    题目戳我 \(\text{Solution:}\) 这题不要把思想局限到线段树上--这题大意就是求路径经过的值中\(x\)的出现性问题. 最开始的想法是值域线段树--看了题解发现直接\(vector\ ...

  4. P5838 [USACO19DEC]Milk Visits G

    发现是一道比较裸的树上莫队,于是就开始刚,然后发现好像是最难的一道题--(本题解用于作者加深算法理解,也欢迎各位的阅读) 题意 给你一棵树,树有点权,询问一条路径上是否有点权为 \(c\) 的点. 题 ...

  5. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

  6. How do servlets work-Instantiation, sessions, shared variables and multithreading[reproduced]

    When the servletcontainer (like Apache Tomcat) starts up, it will deploy and load all webapplication ...

  7. SparkStreaming实现Exactly-Once语义

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 译自:http://blog.cloudera.com/blog/2015/03/exactly ...

  8. Federated Identity Pattern 联合身份模式

    Delegate authentication to an external identity provider. This pattern can simplify development, min ...

  9. Javascript本地存储小结

    前言 总括:详细讲述Cookie,LocalStorge,SesstionStorge的区别和用法. 人生如画,岁月如歌. 原文博客地址:Javascript本地存储小结 知乎专栏&& ...

  10. AAU

    AAU (Active Antenna Unit) In the MBB (Mobile Broadband) era, the astonishing growth in data traffic ...

随机推荐

  1. Flutter系列文章-Flutter应用优化

    当涉及到优化 Flutter 应用时,考虑性能.UI 渲染和内存管理是至关重要的.在本篇文章中,我们将通过实例深入讨论这些主题,展示如何通过优化技巧改进你的 Flutter 应用. 代码性能优化 1. ...

  2. xv6 中的进程切换:MIT6.s081/6.828 lectrue11:Scheduling 以及 Lab6 Thread 心得

    絮絮叨 这两节主要介绍 xv6 中的线程切换,首先预警说明,这节课程的容量和第 5/6 节:进程的用户态到内核态的切换一样,细节多到爆炸,连我自己复习时都有点懵,看来以后不能偷懒了,学完课程之后要马上 ...

  3. 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?

    Vue.js 官方脚手架 create-vue 是怎么实现的? 摘要 本文共分为四个部分,系统解析了vue.js 官方脚手架 create-vue 的实现细节. 第一部分主要是一些准备工作,如源码下载 ...

  4. Mysql中文字符串提取datetime

    DATE_FORMAT无法用于提取含中文字符的时间字符串中的时间, 可以通过STR_TO_DATE来提取其中的信息, 如下: SELECT STR_TO_DATE("2018年11月05日 ...

  5. 一文弄懂TypeScript中的混合

    1.前言 由于TypeScrip中的类不支持多继承,所以引入了混合(Mixin)的特性,可以间接实现继承的效果. 2.正文 // 声明一个汽车类Vehicle,它有drive方法 class Vehi ...

  6. Solution -「GXOI / GZOI 2019」AND OR Sum

    Description Link. 给定一个 \(N \times N\) 的矩阵,她希望求出: 该矩阵的所有子矩阵的 \(\texttt{AND}\) 值之和(所有子矩阵 \(\texttt{AND ...

  7. 慢SQL原因分析之索引失效

    现象 最近收到一个慢sql工单,慢sql大概是这样:"select xxx from tabel where type = 1". 咦,type字段明明有索引啊,为啥是慢sql呢? ...

  8. Linux挂载新磁盘

    Linux挂载新磁盘 1. 查看磁盘 # df -lh # 查看磁盘占用情况,同时可以查看已挂载的磁盘及其挂载位置 # fdisk -l # 查看所有的磁盘分区 图中 /dev/sdb 下无分区信息, ...

  9. vue中watch侦听器,deep和immediate的用法

    1.deep深度监听的用法 当监听一个对象时,可能想监听整个对象的变化,而不仅仅是某个属性.但在默认情况下,如果你正在监听formData对象并且修改了formData.username,对应的侦听器 ...

  10. 9. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP2改造篇之HPACK示例, 了解http2头信息如何处理

    9. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP2改造篇之HPACK示例, 了解http2头信息如何处理 项目 ++wmproxy++ gite: https://gite ...