几度欲写,却望高精而却步,今习得__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 排水系统的更多相关文章

  1. P7113 [NOIP2020] 排水系统 (拓扑排序)

    (不想打高精,也不想学习其他大佬的神仙写法,打了90分的错解). 本题容易想到用拓扑排序处理,涉及分数的加法,用long long会超时,不过通分时先除后乘卡一下也可以拿90分. 结构体真是个复杂的东 ...

  2. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  3. 【XJOI】NOIP2020模拟训练题2 总结

    得分情况: 估分: 30(T1)+100(T2)+0(T3)=130; 实际: 30(T1)+60(T2)+10(T3)=100;   QAQ 是我高看自己了   T1  友好数对: 题意: 如果一个 ...

  4. NOIP2020 游记

    为了防止被禁赛三年,这里说明一下,本篇游记是提前开坑的. 10.9 上午模拟赛,下午初赛改成了全天初赛. 但还是想了会儿题,写了两道水题找找信心吧,毕竟前几天挂分挺严重的. 机房还是挺乱的,甚至连自己 ...

  5. NOIp2020游记

    Day 1 考点还是在南航,第三次去已经没有什么新鲜感了,满脑子都是NOIp能不能考好.考前奶了一波这次必考最短路,于是在试机的时候打了一遍Dij和SPFA的板子,信心满满的上场了. 考试右后方是Ki ...

  6. NOIP2020退役记

    Day 0 这一次因为疫情仍然没有试机,但是允许提前打开虚拟机,减少了调试虚拟机的时间 开考时,吸取上一次 \(CSP\) 的教训,先把题面看了一遍 感觉 \(T1\) 比较可做,剩下的暂时没有思路 ...

  7. NOIP2020 浙江 游记

    day - ? 由于 CSP-S 的失利,感觉这一次 NOIP 的心态反而是非常的淡定,感觉反正已经炸过一次了,再炸一次好像也没什么,就抱着这样的心态去考试的. day 1 考试当天起晚了,到考场的时 ...

  8. NOIP2020 T2 字符串匹配题解

    首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...

  9. NOIP2020 移球游戏

    Description 给定 \(n+1\) 个栈,前 \(n\) 个栈内有不定的 \(m\) 个元素,最后一个栈为空,每个栈的最大容量为 \(m\) 每种颜色都有 \(m\) 种,求任意一种方法,使 ...

随机推荐

  1. ESP8266学习实战之UdpClient与UdpSever(FreeRTOS)

    Udpclient 任务流程 ①判断是否获取ip地址 新建状态变量 STATION_STATUS stastatus; 调用wifi接口,并判断是否获取IP地址 ·do { stastatus = w ...

  2. 『学了就忘』Linux日志管理 — 91、日志服务rsyslogd说明

    目录 1.日志文件格式 2.rsyslogd服务的配置文件 (1)rsyslog.conf文件内容 (2)rsyslog.conf配文件内容说明 (3)定义自己的日志 1.日志文件格式 只要是由日志服 ...

  3. Protobuf 动态加载 .proto 文件并操作 Message

    Google Protocol Buffer 的常规用法需要使用 protoc 将 .proto 编译成 .pb.h 和 .pb.cc,这样做效率非常高,但是耦合性也很高.在某些追求通用性而不追求性能 ...

  4. 【LeetCode】275. H-Index II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/h-index- ...

  5. 【LeetCode】99. Recover Binary Search Tree 解题报告(Python)

    [LeetCode]99. Recover Binary Search Tree 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/p ...

  6. Andrey and Problem

    B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. Proximal Algorithms 1 介绍

    目录 定义 解释 图形解释 梯度解释 一个简单的例子 Proximal Algorithms 定义 令\(f: \mathrm{R}^n \rightarrow \mathrm{R} \cup \{+ ...

  8. jboss CVE-2015-7501 反序列化漏洞复现

    JBOSS反序列化漏洞 环境: vulfocus jboss CVE-2015-7501 云服务器 kali攻击机 基本原理:JBoss在/invoker/JMXInvokerServlet请求中读取 ...

  9. Oracle 查询NULL字段/空字符串

    简单记录一下: 工作中需要查询某个字段值为空的数据, 最开始查询的时候按照以前的思路 : 1.where 字段名=NULL,点击F8,未查到结果: 2.where 字段名='',点击F8,未查到结果: ...

  10. 安装KVM

    在VMWare安装CentOS7 选择图形界面和开发工具 设置网络 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 BOOTPROTO=static ...