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\) 种,求任意一种方法,使 ...
随机推荐
- word里搜狗输入法出不来,可以按ctrl+空格键
word里搜狗输入法出不来,可以按ctrl+空格键
- ACwing895. 最长上升子序列
题目: 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式: 第一行包含整数N. 第二行包含N个整数,表示完整序列. 输出格式: 输出一个整数,表示最大长度. 数据范围: ...
- JAVA日期Date格式转corn表达式
date转corn 定时任务获取corn /*** * 日期转corn表达式 * @param date 日期 * @return */ public static String getCron(Da ...
- windows安装openoffice4
官网:https://www.openoffice.org/download/index.html 下载完成后 直接点击安装即可
- 【九度OJ】题目1438:最小公倍数 解题报告
[九度OJ]题目1438:最小公倍数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1438 题目描述: 给定两个正整数,计 ...
- 【LeetCode】114. Flatten Binary Tree to Linked List 解题报告(Python & C++ & Java)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先序遍历 递归 日期 题目地址:https://le ...
- 【LeetCode】437. Path Sum III 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS + DFS BFS + DFS 日期 题目地 ...
- 第四十八个知识点:TPM的目的和使用方法
第四十八个知识点:TPM的目的和使用方法 在检查TPM目的之前,值得去尝试理解TPM设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...
- A Primer on Domain Adaptation Theory and Applications
目录 概 主要内容 符号说明 Prior shift Covariate shift KMM Concept shift Subspace mapping Wasserstein distance 应 ...
- JDK HttpClient 单次请求的生命周期
HttpClient 单次请求的生命周期 目录 HttpClient 单次请求的生命周期 1. 简述 2. uml图 3. Http连接的建立.复用和降级 3.1 调用流程及连接的建立和复用 3.2 ...