coci2011 debt 还债
coci2011 debt 还债
Description
有N个人,每个人恰好欠另一个人Bi元钱,现在大家都没有钱,政府想要给其中一些人欠,使得大家都不欠别人钱。
如A欠B 50,B欠C 20,则当政府给A50元时,A会立刻用50还清和B的债务,B也会立刻用20还清和C的债务。
欠款必须一次还清。如A欠B 50, B欠A50,你不能给A 49元让A还49元给B。
问政府至少花多少钱?
Input Format
第一行 N (2≤N ≤ 200,000) 表示居民数
接下来N行, 每行有两个数 Ai和 Bi, 表示第i位居民欠编号为Ai的居民Bi元钱 1 ≤ Ai≤ N, Ai ≠ i ) , 1 ≤Bi ≤10,000
Output Format
政府至少花多少钱
Sample Input
4
2 100
1 100
4 70
3 70
Sample Output
170
Solution
若i欠Ai Bi元钱,则让i向Ai连出一条边权为Bi的边,构成几个联通块。
每个联通块,有且仅有一个环。(由题目所给的“每个人恰好欠另一个人Bi元钱”可得)。
对于不在环上的点a,用拓扑排序处理 ,若a不足以支付债务则由政府支付。
对于环上的点b,设环外的居民欠他\(S_1\)元,环上的居民欠他\(S_2\)元,他欠别人\(P\)元。
则政府需要为环上每个居民支付\(max(P-S_1 +S_2,0)\)元钱,使得每个居民收到欠款之后有能力还债,并支付
所有环上居民中最小的\(max(P-S_1,0)\)使得有一个人能在未接受环上居民还钱的情况下能够还债。
Code
#include <cstdio>
#include <algorithm>
#define N 200007
inline int read(){
int num=0,k=1;char c=getchar();
while (c<'0'||c>'9'){if (c=='-')k=-1;c=getchar();}
while (c>='0'&&c<='9') num=(num<<1)+(num<<3)+c-48,c=getchar();
return num*k;
}
bool pd[N];
int n,ans,s,m[N],d[N],To[2][N],stac[N];
inline void dfs(int k,int pre){
if (pre){
ans+=std::max(0,To[1][k]-pre-m[k]);
s=std::min(s,std::max(0,To[1][k]-m[k]));
}
pd[k]=true;
if (!pd[To[0][k]]) dfs(To[0][k],To[1][k]);
else {
pre=To[1][k],k=To[0][k];
ans+=std::max(0,To[1][k]-pre-m[k]);
s=std::min(s,std::max(0,To[1][k]-m[k]));
}
}
int main(){
n=read();
for (int i=1;i<=n;++i)
To[0][i]=read(),To[1][i]=read(),++d[To[0][i]];
for (int i=1;i<=n;++i)
if (!d[i]) stac[++stac[0]]=i;
while (stac[0]){
int Top=stac[stac[0]--];
pd[Top]=true;
--d[To[0][Top]];
ans+=std::max(To[1][Top]-m[Top],0);
m[To[0][Top]]+=To[1][Top];
if (!d[To[0][Top]]) stac[++stac[0]]=To[0][Top];
}
for (int i=1;i<=n;++i)
if (!pd[i])
s=100007,dfs(i,0),ans+=s;
printf("%d\n",ans);
}
coci2011 debt 还债的更多相关文章
- 1642: 【USACO】Payback(还债)
1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...
- Emotion Debt 2017/1/6
原文 We can't move beyond the past until our emotional debts are paid. Many people today live under th ...
- bzoj1021 [SHOI2008]Debt 循环的债务
前天打了一场比赛,让我知道自己Dp有多弱了,伤心了一天,没刷bzoj. 昨天想了一天,虽然知道几何怎么搞,但我还是不敢写,让我知道自己几何有多弱了,伤心了一天,没刷bzoj 1021: [SHOI20 ...
- BZOJ 1021 [SHOI2008]Debt 循环的债务
1021: [SHOI2008]Debt 循环的债务 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 694 Solved: 356[Submit][S ...
- BZOJ 1021: [SHOI2008]Debt 循环的债务( dp )
dp(i, j, k)表示考虑了前i种钱币(从小到大), Alice的钱数为j, Bob的钱数为k, 最小次数. 脑补一下可以发现, 只有A->B.C, B->A.C, C->A.B ...
- Technical debt
What is Technial debt? Technical debt is not bug. It is that the feature can work, but it is not a p ...
- [财务知识] debt debit credit 的区别于联系
https://blog.csdn.net/sjpljr/article/details/70169303 剑桥词典解释分别为: Debt [C or U ] n.something, especia ...
- bzoj千题计划111:bzoj1021: [SHOI2008]Debt 循环的债务
http://www.lydsy.com/JudgeOnline/problem.php?id=1021 如果A收到了B的1张10元,那么A绝对不会把这张10元再给C 因为这样不如B直接给C优 由此可 ...
- 【题解】Ples [COCI2011]
[题解]Ples [COCI2011] 依旧是没有传送门,只有提供了数据的官网. [题目描述] \(N\) 个汉子和 \(N\) 个妹纸一起参加舞会,跳舞时只能是一个汉子一个妹纸配对,现在给出每个人的 ...
随机推荐
- Java 中 Hashtable与HashMap的区别
Map Map是一个以键值对存储的接口.Map下有两个具体的实现,分别是HashMap和HashTable. 区别: 1.HashMap是线程非安全的,HashTable是线程安全的,所以HashMa ...
- .Net Core WebApi(2)—Swagger
上一个版本的入门Swagger提示不够完整,这章着重完善和优化 Swagger用于将我们编写的接口自动生成规范化的文档,便于进行测试和对接 一.创建Swagger 1.1 Nuget 安装 ...
- 网页调用文件另存为js
查看引用是否正常,页面添加html代码. <a id="downLoad" onclick="oDownLoad('downLoad')">下载&l ...
- 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...
- 一个多进程爬虫下载图片的demo
import os,re import pickle import requests import random import time from bs4 import BeautifulSoup f ...
- python-tyoira基本
目录 .Typora安装 我们在之前的时候记录笔记就是使用word和记事本,但是从今天开始我们要更换软件,记录笔记使用Typora软件,为什么要使用Typora的软件呢,是因为我们程序员不只是写代码这 ...
- Matlab工厂模式
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类.工厂模式主要分为简单工厂模式.工厂方法模式以及抽象工厂模式. Obj.m classdef Obj ...
- 单词dyamaund钻石dyamaund英语
dyamaund 英文词汇,中文翻译为金刚石的;镶钻;用钻石装饰 中文名:镶钻;钻石装饰 外文名:dyamaund 目录 释义 dyamaund 读音:[?da??m?nd, ?da?m?nd] ...
- MacOS查看NGINX文件路径(配置文件、日志文件)
使用 MacOS 经常发现 NGINX 路径不好找,后来发现一个很好的命令来查找: nginx -V 即可输出 NGINX 各文件夹的路径.
- 再来一个tensorflow的测试性能的代码
感觉这个比前一套,容易理解些~~ 关于数据提前下载的问题: https://www.jianshu.com/p/5116046733fe 如果使用keras的cifar10.load_data()函数 ...