拓扑排序 信息奥赛一本通 1352:【例4-13】奖金

2023-11-10 02:49

本文主要是介绍拓扑排序 信息奥赛一本通 1352:【例4-13】奖金,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1352:【例4-13】奖金


时间限制: 1000 ms        内存限制: 65536 KB
提交数: 607     通过数: 223 

【题目描述】

由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。

于是Mr.Z下令召开m方会谈。每位参加会谈的代表提出了自己的意见:我认为员工a的奖金应该比b高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100元。

【输入】

第一行两个整数n,m,表示员工总数和代表数;

以下m行,每行2个整数a,b,表示某个代表认为第a号员工奖金应该比第b号员工高。

【输出】

若无法找到合理方案,则输出“PoorXed”;否则输出一个数表示最少总奖金。

【输入样例】

2 1
1 2

【输出样例】

201

【提示】

【数据规模】

80%的数据满足:n≤1000m≤2000

100%的数据满足:n≤10000m≤20000

【来源】


No

 算法实现:

注意输入应该b——>a;(拓扑排序规则)

每次首先查找入度为0的点,将其放入队列,然后取出它指向的那些点,把他们的工资+=目前入度为0的点的工资-100(增值);然后将入度为0的点删除,对应的邻接点入度减1;循环,不断查找入度为0的点,直到找不到为止。

判断是否无效(有环):如果所有的点都已经在上一步操作过,即不断删除后入度为0,即有效,否则无效。

代码实现:

 

#include<bits/stdc++.h>
using namespace std;
#define N 20005
int n,m,tot=0;
vector<int>g[N];//g[i]表示i节点所指向的其他节点
int in[N],pay[N],vis[N];   //节点入读
int topsort()
{int mon=0,sum=0;priority_queue<int,vector<int>,greater<int> >q;while(1){int t=0;for(int i=1;i<=n;i++)if(in[i]==0&&vis[i]==0)  //每次查找入度为0的点{q.push(i);t=1;vis[i]=1;}if(t==0) break;while(!q.empty()){int u=q.top();q.pop();sum++;  //记录已经算节点数pay[u]+=mon;//加上现在的增值for(int i=0;i<g[u].size();i++){int v=g[u][i];in[v]--;}}mon++;}return sum==n;//判断是否有环}
int main()
{scanf("%d%d",&n,&m);memset(in,0,sizeof(in));memset(vis,0,sizeof(vis));for(int i=0;i<=n;i++){g[i].clear();pay[i]=100;}for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);g[v].push_back(u);in[u]++;}if(topsort()){int sum=0;for(int i=1;i<=n;i++)sum+=pay[i];cout<<sum<<endl;}else cout<<"Poor Xed"<<endl;return 0;
}

这篇关于拓扑排序 信息奥赛一本通 1352:【例4-13】奖金的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379971

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory