首页 > 其他分享 >p8269-usaco22open-visits-s-ti-jie

p8269-usaco22open-visits-s-ti-jie

时间:2024-04-12 20:12:41浏览次数:16  
标签:jie p8269 int 拜访 long maxn usaco22open 奶牛 高兴

题意

一共有 $n$ 头奶牛,每一头奶牛都有自己想拜访的奶牛,用 $a_i$ 表示牛 $i$ 想拜访的牛。对于每一头牛 $i$,如果它想拜访的牛在家,就会离开家并拜访它,还会增加 $v_i$ 的欢乐值,最后求欢乐值的最大值。

思路

我们可以将这个问题看作一个一个图,且每一个节点的出度都是 $1$。 我们可以发现除了每个环中会有一个奶牛无法获得高兴值,其他的奶牛都可以获得高兴值。

我们可以用拓扑排序来找到所有不在环上的奶牛,将答案加上他们的高兴值。接下用 dfs 找出每个环。对于每个环中的无法获得高兴值的奶牛,我们肯定选高兴值最小的。找到每个环的奶牛的非小值并加上它们。

最后在贴上代码:

#include<bits/stdc++.h>
using namespace std;
#define inf 1e18+10
#define int long long
const int maxn=100010;
int n,a[maxn],v[maxn],rd[maxn],ans,minn=inf;
bool vis[maxn];
queue<int>q;
void topo(){
    for(int i=1;i<=n;i++){
        if(!rd[i])q.push(i);
    }
    while(!q.empty()){
        int x=q.front();q.pop();
        ans+=v[x];rd[a[x]]--;
        vis[x]=1;
        if(!rd[a[x]])q.push(a[x]);
    }
    return;
}
void dfs(int x){
    vis[x]=1;
    minn=min(minn,v[x]);
    if(vis[a[x]])return;
    dfs(a[x]);
    return;
}
signed main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&a[i],&v[i]);
        rd[a[i]]++;
    }
    topo();
    for(int i=1;i<=n;i++){
        if(!vis[i])ans+=v[i];
    }
    for(int i=1;i<=n;i++){
        if(vis[i])continue;
        minn=inf;dfs(i);
        ans-=minn;
    }
    printf("%lld",ans);
    return 0;
}

标签:jie,p8269,int,拜访,long,maxn,usaco22open,奶牛,高兴
From: https://www.cnblogs.com/ybaggio/p/17204287.html

相关文章

  • jieba分词+sk-learn计算样本问题最相似的问题
    场景:输入一段内容,找到问题集中跟该内容最相似的问题importjiebafromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.metrics.pairwiseimportcosine_similaritytemplates=["出来钓鱼了喂","王大腚爱钓鱼","格小格爱爱钓鱼",......
  • jieba 分词器包的导入
    anaconda安装jieba(被折腾了很久)终于搞定_anaconda离线安装jieba-CSDN博客在命令窗口pip的时候老师说让更新后面并且更新失败  ......
  • 【easy52pojie】一款方便看吾爱论坛帖子的爬虫程序
    【easy52pojie】一款方便看吾爱论坛帖子的爬虫程序众所周知吾爱论坛一页最多显示十来条回帖,且间隔很大,每页的信息密度太低了。在帖子很庞大的情况下,一页一页翻页,着实有点痛苦。故简单敲敲代码,使用requestxpath技术做了一个论坛帖子回复查看器,名称为easy52pojie,运行代码即可导出......
  • Flink CDC简介-flinkcdc-jian-jie
    FlinkCDC官方文档什么是FlinkCDC¶FlinkCDCConnectors是ApacheFlink的一组源连接器,使用变更数据捕获(CDC)从不同数据库中获取变更。FlinkCDCConnectors集成Debezium作为捕获数据变化的引擎。所以它可以充分发挥Debezium的能力。详细了解Debezium是什么。支......
  • C# 分词jieba中文分词
    一、简介:ieba.NET是jieba中文分词的.NET版本(C#实现)。当前版本为0.42.2,基于jieba0.42,提供与jieba基本一致的功能与接口,但不支持其最新的paddle模式。关于jieba的实现思路,可以看看这篇wiki里提到的资料。此外,也提供了KeywordProcessor,参考FlashText实现。KeywordProcessor可......
  • Oracle 表空间和数据文件遇到的坑 (转载于 微信公众号 JieKeXu DBA之路)
    转载链接https://mp.weixin.qq.com/s/IKF_KrWkxZ5BJS-OacYWUw前言本文适用于普通的标准的8k块大小的Oracle企业版数据库,10g、11g、19c均可适用,但对于ODA,一体机可能有所区别,请慎重使用1.db_files的坑记录一下年前遇到的一个关于表空间扩容的小问题,大家都知道对于Oracle......
  • 2024 52pojie春节解题领红包之Windows 高级题
    202452pojie春节解题领红包之Windows高级题分析:crackme2024.exex64位程序upx脱壳,x64dbg设置异常,手动脱壳,略反调试cinit-->initterm_4定位到如下函数VEH_antiBP_140001670__int64VEH_antiBP_140001670(){qword_140020E58=findCC_1400022F0(0x64,0i64);AddVe......
  • wordcloud库和jieba库的使用
    目录wordcloud库的简单示范使用wordcloud库报错记录anaconda安装第三方jieba库jieba库的简单示范任务1:三国演义中的常见词汇分布在“三国"这两个隶书字上,出现频率高的词字体大任务2:三国演义中出现频率前十的人名。必须是以下这十个名字,名字组成心形wordcloud库的简单示范from......
  • 如何在 Python 中使用 jieba 库来进行关键词提取
    jieba是一个流行的中文分词库,通过简单的几行代码,您就可以轻松地使用jieba库来提取中文文本中的关键词。本文将介绍jieba库的安装方法以及关键词提取的示例代码,并希望对您有所帮助。正文:1.安装jieba库:首先,我们需要安装jieba库。可以使用以下命令来安装jieba库:```pipinstalljieba......
  • 西游记jieba分词统计
    importjieba排除非人名excludes={"一个","那里","怎么","我们","不知","和尚","妖精","两个","甚么","不是","只见","国王","徒弟","呆子","如何"......