当前位置: 首页 > article >正文

奖金——Topsort

题目

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+10, M = 2e4+10;
int h[N], e[M], ne[M], idx;
int d[N], in[N], cnt;
int n, m;
queue<int> q;
void add(int a, int b)  // 添加一条边a->b
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

bool bfs()
{
    for(int i = 1; i <= n; i++)
        if(!in[i]) q.push(i), d[i] = 0;
    
    while(q.size())
    {
        int u = q.front(); q.pop(); cnt++;
        
        for(int i = h[u]; ~i; i = ne[i])
        {
            int j = e[i];
            if(--in[j] == 0)
            {
                if(~d[j])
                {
                    if(d[j] != d[u] + 1) return false;
                    
                }
                else d[j] = d[u] + 1;
                q.push(j);
            }
        }
    }
    
    return cnt == n;
}
int main()
{
    cin >> n >> m;
    memset(h, -1, sizeof h);
    for(int i = 1; i <= m; i++)
    {
        int a, b;
        cin >> a >> b;
        add(b, a);
        in[a]++;
    }
    
    memset(d, -1, sizeof d);
    bool success = bfs();
    if(!success)
    {
        cout << "Poor Xed";
        return 0;
    }
    
    int ans = 0;
    for(int i = 1; i <= n; i++)
        ans += 100 + d[i];
        
    cout << ans;
}


http://www.kler.cn/a/350554.html

相关文章:

  • C 语言的void*到底是什么?
  • tui-editor报错
  • JVM相关面试题
  • Jenkins-Pipeline简述
  • 【Linux】【Vim】vim编辑器的用法
  • 计算机网络 (43)万维网WWW
  • 基于STM32的自学习走迷宫智能小车设计
  • 空间限域效应
  • Java基础14-网络编程
  • 基于springboot学生成绩管理系统
  • linux系统,不定时kernel bug :soft lockup的问题
  • android studio导入外部项目
  • 24/10/12 算法笔记 汇聚层
  • mysqlRouter读写分离
  • 常用分布的数学期望、方差、特征函数
  • linux下编译鸿蒙版boost库
  • 【2021】知识图谱导论(陈华钧)——阅读思考与笔记
  • 常见网络协议的介绍、使用场景及 Java 代码样例
  • 《深度学习》循环神经网络RNN 结构及原理解析
  • 应急响应处置流程Windows篇
  • LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程
  • GO 语言协程知识点学习笔记
  • 进程通信——管道
  • 中国平安蝉联2024“金融业先锋30”第一名 获金融业ESG最高五星评级
  • HashMap 扩容流程详解
  • 域内信息收集和攻击思路