NOIP2020 排水系统
几度欲写,却望高精而却步,今习得__int128,君子报仇,一年不晚。
NOIP2020 排水系统
DAG图,拓扑就好,核心难点在于毒瘤的分数的操作,毕竟只是T!只有分数相加,就很简单了。
a/b + x/y = (ay+bx)/by
约分
a/=gcd(a,b) b/gcd(a,b)
本来到这里就结束了的(当时我就是这么想的)然鹅ccf还藏有后手:
不会经过超过10个中间排水结点,你以为这是告诉你数据不大对吧,由于每次最多分成1/5可以最多分5次,途中还可能有汇入的,每次分母都相乘。假如只有两个接水点,一个排水点,分母都可以达到5^20,longlong都存不下。
几次刷到这题,看到高精我就走了,直到我学到了__int128。
所以,15分钟一遍就A了。
代码:
#include<bits/stdc++.h>
#define INT __int128
using namespace std;
const int MM=500005;
stack<int> s;
int u,n,m,chu[MM],ru[MM],tot,nxt[MM],head[MM],to[MM],now;
long long fz[MM],fm[MM],G;
inline void output(__int128 x)
{
if(x>9)
output(x/10);
putchar(x%10+'0');
}
void add(int u,int v)
{
nxt[++tot]=head[u];
head[u]=tot;
to[tot]=v;
}
INT gcd(INT a,INT b)
{
if(!b)
return a;
return gcd(b,a%b);
}
void topsort()
{
while(!s.empty())
{
now=s.top();
s.pop();
if(fz[now]==0||chu[now]==0)continue;
fm[now]*=chu[now];
G=gcd(fz[now],fm[now]);
fz[now]/=G;
fm[now]/=G;
for(int i=head[now];i;i=nxt[i])
{
int v=to[i];
fz[v]*=fm[now];
fz[v]+=fz[now]*fm[v];
fm[v]*=fm[now];
G=gcd(fz[v],fm[v]);
fz[v]/=G;
fm[v]/=G;
ru[v]--;
if(!ru[v])
s.push(v);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
fm[i]=1;
if(i<=m)
fz[i]=1;
cin>>chu[i];
for(int j=1;j<=chu[i];j++)
{
cin>>u;
ru[u]++;
add(i,u);
}
}
for(int i=1;i<=n;i++)
if(!ru[i])
s.push(i);
topsort();
for(int i=1;i<=n;i++)
if(!chu[i])
output(fz[i]),cout<<' ',output(fm[i]),cout<<endl; return 0;
}
NOIP2020 排水系统的更多相关文章
- P7113 [NOIP2020] 排水系统 (拓扑排序)
(不想打高精,也不想学习其他大佬的神仙写法,打了90分的错解). 本题容易想到用拓扑排序处理,涉及分数的加法,用long long会超时,不过通分时先除后乘卡一下也可以拿90分. 结构体真是个复杂的东 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 【XJOI】NOIP2020模拟训练题2 总结
得分情况: 估分: 30(T1)+100(T2)+0(T3)=130; 实际: 30(T1)+60(T2)+10(T3)=100; QAQ 是我高看自己了 T1 友好数对: 题意: 如果一个 ...
- NOIP2020 游记
为了防止被禁赛三年,这里说明一下,本篇游记是提前开坑的. 10.9 上午模拟赛,下午初赛改成了全天初赛. 但还是想了会儿题,写了两道水题找找信心吧,毕竟前几天挂分挺严重的. 机房还是挺乱的,甚至连自己 ...
- NOIp2020游记
Day 1 考点还是在南航,第三次去已经没有什么新鲜感了,满脑子都是NOIp能不能考好.考前奶了一波这次必考最短路,于是在试机的时候打了一遍Dij和SPFA的板子,信心满满的上场了. 考试右后方是Ki ...
- NOIP2020退役记
Day 0 这一次因为疫情仍然没有试机,但是允许提前打开虚拟机,减少了调试虚拟机的时间 开考时,吸取上一次 \(CSP\) 的教训,先把题面看了一遍 感觉 \(T1\) 比较可做,剩下的暂时没有思路 ...
- NOIP2020 浙江 游记
day - ? 由于 CSP-S 的失利,感觉这一次 NOIP 的心态反而是非常的淡定,感觉反正已经炸过一次了,再炸一次好像也没什么,就抱着这样的心态去考试的. day 1 考试当天起晚了,到考场的时 ...
- NOIP2020 T2 字符串匹配题解
首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...
- NOIP2020 移球游戏
Description 给定 \(n+1\) 个栈,前 \(n\) 个栈内有不定的 \(m\) 个元素,最后一个栈为空,每个栈的最大容量为 \(m\) 每种颜色都有 \(m\) 种,求任意一种方法,使 ...
随机推荐
- Linux httpd搭建
Linux 搭建网站 配置网络 1 改对应配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens32 2 使用命令 nmcli connection add ...
- AcWing03. 完全背包问题
有\(N\)种物品和一个容量是\(V\)的背包,每种物品都有无限件可用. 第\(i\)种物品的体积是\(v_i\),价值是\(w_i\). 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量, ...
- ORACLE数据库登录显示ORA-28001: the password has expired
Oracle数据库登录显示 "这个密码已过期,请输入新密码" 点击win键 找到Oracle的SQL Plus 点击打开之后输入登录的用户名密码,然后会显示该密码已过期,输入新口令 ...
- 【LeetCode】279. Perfect Squares 解题报告(C++ & Java)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 四平方和定理 动态规划 日期 题目地址:https: ...
- 【LeetCode】306. Additive Number 解题报告(Python)
[LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- wordpress中遇到的问题
在博客园申请了账号,也已经开始写了两篇内容,但还是想要有属于自己的小站.于是将域名续费了几年,又在我之前买的vps上搭建了一个wordpress博客站点,这样以后我就可以同时发布到两个地方. 根据教程 ...
- 洛谷1052——过河(DP+状态压缩)
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- IM2603 Type-C扩展坞电源管理 IC
IM2603 概述 用于带有集成降压转换器的 Type-C 外围应用的电源管理 IC IM2603 是一款主要用于 Type-C 外围应用的电源管理 IC. 它集成了一个带有内置高侧 MOSFET 的 ...
- Spring企业级程序设计 • 【第1章 Spring之旅】
全部章节 >>>> 本章目录 1.1 Spring框架基础 1.1.1 Spring特点及体系结构 1.1.1 Spring的体系结构 1.1.2 使用Eclipse搭建 ...
- 关于 Spring-WebFlux 的一些想法
本文是本人在知乎提问 spring webflux现在看来是否成功? 下的回答,其他回答也很精彩,如果感兴趣可以查看 现在基于 spring web 的同步微服务有一个非常大的缺陷就是:相对于基于 s ...