首页 > 其他分享 >P11073 Game King

P11073 Game King

时间:2024-10-13 14:24:32浏览次数:8  
标签:King cnt int stk ++ Game dfn low P11073

P11073 Game King - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

缩点,分别重建图,再建反图,可知,拓扑序大的一定不能到拓扑序小的。不断新建点统计。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_map>
#include <queue>

using namespace std;

typedef pair<int, int> PII;

const int N = 1000010, M = N * 12;

int h[N], ne[M], e[M], idx, hr[N], hx[N];
int n, m, ans;

int dfn[N], low[N], timestamp;
int stk[N], top;
bool in_stk[N];
int id[N], scc_cnt, sizes[N];
int din[N], dout[N], din1[N], dout1[N];
double s1[N], s2[N];
int st[N];

void add(int *h, int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

void tarjan(int u)
{
    dfn[u] = low[u] = ++ timestamp;
    stk[ ++ top] = u; in_stk[u] = true;
    
    for (int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if (!dfn[j])
        {
            tarjan(j);
            low[u] = min(low[u], low[j]);
        }
        else if (in_stk[j]) low[u] = min(low[u], dfn[j]);
    }
    
    if (low[u] == dfn[u])
    {
        scc_cnt ++ ;
        
        int y;
        do {
            y = stk[top -- ];
            id[y] = scc_cnt;
            sizes[scc_cnt] ++ ;
            in_stk[y] = false;
        }while (y != u);
    }
}

int main()
{
    cin >> n >> m;
    
    
    memset(h, -1, sizeof h);
    memset(hr, -1, sizeof hr);
    memset(hx, -1, sizeof hx);
    while (m -- )
    {
        int a, b;
        scanf("%d%d", &a, &b);
        if (a == b) continue;
        add(h, a, b);
    }
    
    int cnt = 0;
    for (int i = 1; i <= n; i ++ )
        if (dfn[i] == 0)
        {
            tarjan(i);
            cnt ++ ;
        }
        
    
    for (int u = 1; u <= n; u ++ )
    {
        for (int i = h[u]; i != -1; i = ne[i]) 
        {
            int j = e[i], a = id[u], b = id[j];
            if (b != a)
            {
                add(hr, a, b); 
                add(hx, b, a);
            }
        }
    }
    
    
    int zero = 0, ans = 0; // 入度为零点数量,ans统计
    for (int u = 1; u <= scc_cnt; u ++ )
    {
        zero ++ ;
        for (int i = hr[u]; i != -1; i = ne[i])
        {
            int j = e[i];
            if (din[j] == 0) zero -- ; 
            din[j] ++ ;
        }
        
        if (zero == 1) st[u] = 1;
    }
    
    zero = 0;
    
    for (int u = scc_cnt; u; u -- )
    {
        zero ++ ;
        for (int i = hx[u]; i != -1; i = ne[i])
        {
            int j = e[i];
            if (dout[j] == 0) zero -- ; 
            dout[j] ++ ;
        }
        if (zero == 1 && st[u]) ans += sizes[u];
    }
    
    cout << ans << endl;
    return 0; 
}

标签:King,cnt,int,stk,++,Game,dfn,low,P11073
From: https://www.cnblogs.com/blind5883/p/18462257

相关文章

  • PyTorchStepByStep - Chapter 2: Rethinking the Training Loop
      defmake_train_step_fn(model,loss_fn,optimizer):defperform_train_step_fn(x,y):#SetmodeltoTRAINmodemodel.train()#Step1-Computemodel'spredictions-forwardpassyhat=model(x)......
  • Leetcode 贪心算法之Jump Game II
    题目描述给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0<=j<=nums[i]i+j<n返回到达nums[n-1]的最小跳跃次数。生成的......
  • INFO1113 / COMP9003 a prototype of the game
    INFO1113/COMP9003AssignmentDue:20October2024,11:59PMAESTThisassignmentisworth20%ofyourfinalgrade.TaskDescriptionInthisassignment,youwillcreateagameintheJavaprogramminglanguageusingtheProcessinglibraryforgraphics......
  • pygame写一个黑客帝国屏保
    代码:#coding=utf-8importos,sys,re,timeimportpygameimportrandomfromwin32apiimportGetSystemMetricsfromtkinterimportmessagebox#pyinstaller-F-wpygame_heike.pypygame.init()pygame.display.set_caption("黑客帝国屏幕保护")percent=1scr......
  • SkyWalking应用部署案例
       SkyWalking是一个开源的可观测性平台,特别针对云原生和容器化分布式系统设计。它的目标是帮助用户收集、分析并可视化来自多语言服务(如Java、C#、Node.js等)和云基础设施的数据,实现跨云的系统监控。它提供了一个全面的解决方案,适用于现代APM的需求,包括自动仪器代理和对......
  • Kingst 金思特 LA5016逻辑分析仪 简单入门使用
    前言:这里我仅简单介绍一下Kingst金思特LA5016逻辑分析仪简单入门使用这个软件的快熟上手使用,有补充的话后续在跟新。购买硬件和安装相关软件。软件直接官网下载即可连接如下:。需要说明的是不仅仅只是LA5016,软件同时也兼容其他版本。使用体验:这个Kingst金思特LA5016逻......
  • SkyWalking组件自定义链路追踪
    SkyWalking组件通过添加相关配置就可以获取到接口的相关信息,更加方便的追踪和处理问题接下去讲下步骤:1、在service层添加两个注解;@Trace@Tags({@Tag(key="getDataByCode",value="returnedObj"),@Tag(key="getDataByCode",value="arg[0]")})......
  • 学霸带你游戏化 GameMaker 引擎世界你好
    学霸带你游戏化GameMaker引擎世界你好得分系统与玩家控制在现代游戏开发中,得分系统和玩家控制是构建互动游戏体验的核心元素。得分系统不仅用来衡量玩家的表现,也为游戏增添了挑战和激励。而玩家控制则包括了角色的移动、旋转等操作,这些控制方式直接影响到游戏的流畅......
  • [AGC064C] Erase and Divide Game 题解
    DescriptionTakahashi和Aoki玩游戏。先在黑板上写若干个数,由\(N\)个互不相交的区间\([l_i,r_i]\)组成。两人轮流操作,每次操作先删去所有的奇数/偶数,再把剩下的数除以\(2\)(向下取整),无法操作的人输。Takahashi先手,假设两人都采用最优策略,问谁能获胜。\(1\leqN\leq10^......
  • springcloud集成SkyWalking链路追踪技术
    在微服务多个服务调用过程中,随着服务数量增多,互相调用的变多,就会出现一些问题:1、调用链路,如何快速定位问题2、如果缕清微服务之间的依赖关系3、各个微服务接口性能分析4、整个业务流程的调用处理顺序 skywalking可以很好的处理这些问题,在springcloud微服务中如何整合skywal......