拓扑排序 信息奥赛一本通 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

相关文章

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

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

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