首页 > 其他分享 >sdfoj 小海的数学王国(gen)

sdfoj 小海的数学王国(gen)

时间:2024-09-14 16:52:10浏览次数:1  
标签:分子 int 1000005 数学 小海 sdfoj gen 王国

小海酷爱数学,他的梦想是在太平洋上建立一个数学王国。

终于有一天,他的同学小升研发出了一类叫做“数学分子”的东西,并兴高采烈地跑来找到他,给了他 $N$ 种“数学分子”,按 $1$ 到 $N$ 依次编号。小海要用部分“数学分子”投放到太平洋上构建数学王国。

已知每种“数学分子”都可以掌控另一种“数学分子”。小海希望他能够掌控整个数学王国,因此,他希望 **所有被投放的“数学分子”都有至少一个没有被投放的“数学分子”能掌控它**。

小海想知道,**最多**可以投放的“数学分子”的种类数目。

1.第一个特征,发现每一个点只可能有一个出边。 图形一定有大于等于一个的简单环。

2.通过找规律发现,链上的点黑白染色即可。环上和链上的连接处,如果是被管的点,则相当于把环断开了。如果是管别人的点,也可能作为被管的点。因此,最终成为一个完整的环。

 

//一个特性:
//被管理的点,一定不用进栈。进栈的点,是管别人的.管别人的和被管的都要打标记。
//其余没有打过标记的一定是不相交的环。

#include <bits/stdc++.h>
using namespace std;
stack<int> q;
int to[1000005], ru[1000005], n, cnt, b[1000005], tot;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> to[i];
        ru[to[i]]++;
    }
    for (int i = 1; i <= n; i++) {
        if (ru[i] == 0)
            q.push(i), b[i] = 1;
    }
    //将边砍掉
    while (!q.empty()) {
        int u = q.top();
        q.pop();
        int v = to[u];
        if (b[v] == 0) {
            cnt++;
            b[v] = 1;  //被管的打标记
            ru[to[v]]--;
            if (ru[to[v]] == 0)
                q.push(to[v]), b[to[v]] = 1;  //管别人的打标记
        }
    }
    //接下来只可能是不相交的环
    for (int i = 1; i <= n; i++) {
        if (b[i] == 0) {
            int v = to[i], tot = 1;  //还有一种自环
            b[i] = 1;
            while (v != i) {
                b[v] = 1;
                tot++;
                v = to[v];
            }
            cnt += tot / 2;
        }
    }
    cout << cnt << endl;

    return 0;
}

/*
12
4 4 4 5 6 8 5 9 10 11 8 11

12
4 4 4 5 8 12 5 9 10 11 8 11
*/

 


 

标签:分子,int,1000005,数学,小海,sdfoj,gen,王国
From: https://www.cnblogs.com/caterpillor/p/18414333

相关文章

  • GenericInfo
    packagecom.shrimpking.t5;importjava.lang.reflect.Method;importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;importjava.lang.reflect.WildcardType;importjava.util.ArrayList;importjava.util.Arrays;/***CreatedbyIntelli......
  • autogen示例九:llamaindex的智能pandasai
            相信对于许多从事Python数据分析工作的小伙伴来说,大家都对尝试使用PandasAI所带来的智能化便捷性充满兴趣。然而,由于缺乏OpenAI的API密钥,许多人只能望洋兴叹,无法真正体验到这一技术带来的便利。        现在有一种替代方案,可以让我们绕过这个限制,那......
  • 想要高效创作音乐吗?SongGenerator.io帮你轻松搞定!
    摘要:想要快速生成音乐吗?那就试试SongGenerator.io吧!这款AI工具无需任何音乐制作经验,几分钟内即可将文字描述转化为多种风格的专业音乐。最近我发现了一个非常好用的AI工具,叫SongGenerator.io,它是一个免费的在线AI音乐生成平台。对于那些想要快速创作音乐的朋友们来说,这简直就是......
  • 什么是生成器(Generators)?
    生成器(Generators)在不同的领域和上下文中具有不同的含义,但通常可以概括为一种能够生成新实例或数据的系统、模型或特殊类型的函数。以下是对生成器在不同领域的具体解释:书在python33  点(0M1.编程语言中的生成器在编程语言中,特别是像Python这样的动态语言中,生成器是一种......
  • 3D地形图制作新纪元,教你使用PS中的3D Map Generator制作3D地形图
    大家好!紧接上一篇文章,我将为大家介绍如何使用ps中的3Dmapgentor生成三维地形。首先,先为各位观众介绍一下这款插件,3DMapGenerator是一款功能强大的Photoshop插件,主要用于快速生成地形图等三维地图。具有以下特点和功能:3DMapGenerator插件可用于制作地形图、城市规划、......
  • GENG3405 Stress rotation Friction
    GENG3405.Part 1–2024Submission (LMS) by 5 pm 16 September 2024.Thisisagroupassignment. Please do FRUITTheassignmenttestsbothyourabilitytodothe tasks and to explain how you did them. Instructions1.  A1isobtainedas......
  • ELK 8.15 启用Fleet Server和安装Agent
    注意,这里的URL,使用端口8220,不是443curl-L-Ohttps://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.15.1-linux-x86_64.tar.gztarxzvfelastic-agent-8.15.1-linux-x86_64.tar.gzcdelastic-agent-8.15.1-linux-x86_64可以将如下这一段存为一个sh文件,......
  • 010-BUG: org.springframework.cglib.core.CodeGenerationException: java.lang.refle
    参考:Unabletomakeprotectedfinaljava.lang.Classjava.lang.ClassLoader.defineClass-CSDN博客1.完整报错:"msg":"org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.InaccessibleObjectException-->Unabletomakeprotect......
  • 将 Source Generator 生成的源代码保存到本地文件
    默认的源代码生成器所生成的代码都是没有直接存放到项目文件夹里面的,不受源代码管理工具管理,对使用方的开发者来说很难直接阅读或查找到SourceGenerator生成的源代码。本文将和大家介绍如何使用EmitCompilerGeneratedFiles属性配置将生成的代码保存到本地文件将SourceGene......
  • Doxygen 学习指南: 生成图的类型
    目录标题1.**类图(ClassDiagram)****生成原理**:**生成结果**:2.**调用图(CallGraph)****生成原理**:**生成结果**:1.**继承图(InheritanceDiagram)**2.**协作图(CollaborationDiagram)**3.**包含图(IncludeDependencyGraph)**4.**依赖图(DependencyGraph)**5......