Week_10 C
拓扑排序
题意:输入n行数据a,b ,表示a的钱数大于b的钱数,最低的人分的的钱数为888,问最少需要多少钱可以分给员工
思路:标准的拓扑排序,不过这题需要逆向拓扑
注意点:1、如何判断途中有换,或者说有的点没有选择到,用个int整型cnt,利用拓扑排序的特点,每个点只查找一次,所以当cnt==n的时候,输出sum。
2、多组输入不要忘了初始化数组之类的
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <iomanip>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <vector>
//const int maxn = 1e5+5;
#define ll long long
#define MAX INT_MAX
#define FOR(i,a,b) for( ll i = a;i <= b;++i)
using namespace std;
int n,m,sum,head,headmoney,a,b,cnt;
int degree[]; //度,我就不多说了
vector<int>vec[]; //存此节点下的子节点
queue<int>que; //存接下来思考的节点
int main()
{
// freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
// freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(degree,,sizeof(degree));
while(!que.empty()) que.pop();
memset(vec,,sizeof(vec));
sum=;
cnt=; while(m--)
{
cin>>a>>b;
if(a!=b)
{
vec[b].push_back(a);
degree[a]++;
} } for(int i=;i<=n;++i)
{
if(degree[i]==)
{
//cnt++;
//sum+=888;
que.push(i);
que.push();
}
}
while(!que.empty())
{
cnt++; head=que.front();
que.pop();
headmoney=que.front();
que.pop();
sum+=headmoney;
for(int i=;i<vec[head].size();++i)
{
if(--degree[vec[head][i]]==)
{
que.push(vec[head][i]);
que.push(headmoney+);
}
}
}
if(cnt==n)
{
cout<<sum<<endl;
}
else cout<<"-1"<<endl; } }
Week_10 C的更多相关文章
随机推荐
- 10-PI开发手册-ERP发布服务供外围系统调用(RFC类型)
一. 文档信息 版本号* 更新日期* 姓名* 更新内容及更新理由* 备注* V1.0 2019/02/19 fanjb 文档创建 以福利接口13589(Z00HRJ_GJJ_REV_FI ...
- Infiniband 网络性能测试
1.带宽测试 在server端执行 [ibtests]# ib_send_bw -a -c UD -d mlx4_0 -i 1 ---------------------------------- ...
- 手动安装Package Control
手动下载一个package control的包:https://github.com/wbond/package_control 然后Download ZIP后,解压,将解压后的文件夹重命名为 Pac ...
- [转帖]rsync简介
rsync用法详细解释 https://www.cnblogs.com/noxy/p/8986164.html 之前一直使用 scp 现在发现这个命令更好一些. 提要 熟悉 rsync 的功能及其特点 ...
- PLC 数据类型
类型 长度(位) 取值范围 描述 BOOL 1 0/1 布尔型 BYTE 8 0x00~0xFF 十六进制数 WORD 16 0~65535 无符号整数 DWORD 32 0~4294967295 无 ...
- 注解 springbootapplication 自动扫描所在包及其子包。会将有注解的加入到spring容器中
注解 springbootapplication 自动扫描所在包及其子包.会将有注解的加入到spring容器中
- 【LOJ#3096】[SNOI2019]数论
[LOJ#3096][SNOI2019]数论 题面 LOJ 题解 考虑枚举一个\(A\),然后考虑有多少个合法的\(B\). 首先这个数可以写成\(a_i+kP\)的形式,那么它模\(Q\)的值成环. ...
- VUE项目中使用mint-ui框架总结
针对PC端,element-ui可谓是首选了,UI体验效果很好. element-ui 框架官网:http://element.eleme.io/#/zh-CN/component/installat ...
- 数论ex
数论ex 数学学得太差了补补知识点or复习 Miller-Rabin 和 Pollard Rho Miller-Rabin 前置知识: 费马小定理 \[ a^{p-1}\equiv 1\pmod p, ...
- 使用django执行数据更新命令时报错:django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency users.00 01_initial on database 'default'.
如果在重新封装更新用户表之前,已经更新了数据表,在数据库中已经有了django相关的依赖表,就会报错: django.db.migrations.exceptions.InconsistentMigr ...