这道题是拓扑序的板子题。
直接拓扑序一下,做个分数加法就好
但是这道题的数据范围让人暴毙。

分母最大值可以达到 6 0 11 = 36279705600000000000 60^{11}=36279705600000000000 6011=36279705600000000000,(60是将1/5,1/4,1/3,1/2,1/1合并出来最大的分母)
我就是无数lcm先乘后除的oier之一,炸成60
这道题用unsigned long long都不行, 2 64 − 1 = 18446744073709551615 2^{64}-1=18446744073709551615 264−1=18446744073709551615,不够大
解决方案:
1.用int128,但是NOIP系列竞赛不能用
2.打高精度,在考场会让人自闭
3.用long double!
但是需要解决mod问题:小数如何取模?
cmath中有fmod函数可以解决这个问题。
于是这道题就比较简单了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define ll long long
#define ldb long double
#define N 200005
#define eps 1e-6
using namespace std;
ll f[N*5][3],q[N],du[N],len[N],ans[N];
queue<ll> h;
ll i,j,k,m,n,o,p,l,s,t;
struct node{ldb x,y;
}a[N],ad,c;
void read(ll &x)
{char ch=getchar();x=0;while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-48,ch=getchar();
}
void insert(ll x,ll y) {f[++t][1]=y,f[t][2]=q[x],q[x]=t;}
ldb mod(ldb x,ldb y) {return fmod(x,y);}
ldb gcd(ldb x,ldb y) {return (mod(x,y)>eps)?gcd(y,mod(x,y)):y;}
node change(ldb x,ldb y) {ll gys=gcd(x,y);return (node){x/gys,y/gys};}
node operator +(const node &a,const node &b) {ll gys=gcd(a.y,b.y);c.y=a.y/gys*b.y;c.x=c.y/a.y*a.x+c.y/b.y*b.x;return c;}
int main()
{read(n),read(m);for (i=1;i<=n;i++){read(len[i]);for (j=1;j<=len[i];j++) read(p),insert(i,p),du[p]++;if (!len[i]) ans[++ans[0]]=i;}for (i=1;i<=n;i++)if (!du[i]) h.push(i),a[i]=(node){1,1};else a[i]=(node){0,1};while (!h.empty()){ll st=h.front();h.pop();if (!len[st]) continue;ad=change(a[st].x,a[st].y*len[st]);for (ll k=q[st];k;k=f[k][2]){a[f[k][1]]=a[f[k][1]]+ad;du[f[k][1]]--;if (!du[f[k][1]]) h.push(f[k][1]);}}for (i=1;i<=ans[0];i++) a[ans[i]]=change(a[ans[i]].x,a[ans[i]].y),printf("%.0LF %.0LF\n",a[ans[i]].x,a[ans[i]].y);return 0;
}

NOIP2020正式赛 排水系统(water)题解相关推荐

  1. 【NOIP2017 提高组正式赛】列队 题解

    题目大意 有一个 \(n\times m\) 的方阵,每次有 \((x,y)\) 离开,离开后有两个命令 向左看齐.这时第一列保持不动,所有学生向左填补空缺.这条指令之后,空位在第 \(x\) 行第 ...

  2. 【超好懂的比赛题解】“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)

    title : "山大地纬杯"第十二届山东省ICPC大学生程序设计竞赛(正式赛) date : 2022-5-30 tags : ACM,题解,练习记录 author : Linn ...

  3. ptaa乘以b_PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)...

    C++ CPP C++语言开发 PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中--) PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:     ...

  4. 集美大学第七届天梯赛校选题解

    目录 赛事总结 题目方面 出题组 难度把控 模拟程度 L1 基础级 L1-1 最菜的 算法思路 代码实现 L1-2 复读机 思路 代码实现 L1-3 JMU仓颉再现--绝绝子的何式汉字 题意 解题思路 ...

  5. 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(上海)(热身赛(A/B) + 正式赛(D/E))

    热身赛 A. 虽然计算几何学了和没学差不多,但是板子题还是要会的(火速去补) 一定能形成折线,所以选最长的两个删掉就可以了 struct node {double dist;int x; };int ...

  6. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  7. 10.15补卡 第1届ICPC青少年程序设计竞赛(正式赛)D题

    第1届ICPC青少年程序设计竞赛(正式赛)D题 周赛坐五个小时的牢...只写出来A和D 说实话我也是没信心发这个题解, 因为我就算做出来了, 也不会这题 题意意思就是n个有标号的树, 不能成环, 在a ...

  8. 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享

    零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

  9. xdu1068暨2013陕西省赛C题题解

    xdu1068暨2013陕西省赛C题题解 题意 知道两个数列M和F,每次从M中选择一个人,和从F中选择的一个人配对,结果是Mi*Fj,请问所有配对情况中第k大的情况是多少. 笺释 先对M和F从小到大排 ...

最新文章

  1. tensorflow量化策略详解
  2. 前端性能优化 Web前端应该从哪些方面来优化网站?
  3. LeetCode MySQL 619. 只出现一次的最大数字
  4. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名
  5. IDEA集成Scala图文教程详细步骤
  6. 4月1日见!小米9王源定制版官宣:透明版背壳加持
  7. Linux基本命令总结(六)
  8. 简要分析武汉一起好P2P平台的核心功能
  9. Python天空颜色渐变
  10. 最小公倍数求解完全解读
  11. 你了解资金盘吗?那孪生兄弟产品盘你知道吗?
  12. 电商中,订单号的生成方法
  13. python3模拟登录_python3模拟登录有哪些情况
  14. 每日问答——PMP题库训练2
  15. Python 小型项目大全 36~40
  16. Python数据分析-绘图-2-Seaborn进阶绘图-6-回归图
  17. git ssh配置文件 服务器_Linux 环境 搭建Git 服务器,并且修改SSH端口使用
  18. Win10安装cuda、cudnn检测是否安装成功
  19. 【软件构造】LAB1实验报告
  20. 用python来实现输出 1-1000的素数,并且按照每8个一行输出

热门文章

  1. 基于ISO 21448和STPA方法的自动驾驶安全性和可靠性设计
  2. 淘宝运营常见的二十个问题,优化店铺必看小技巧
  3. Round Robin 概念理解
  4. 【GRPC】JAVA调用go实现负载均衡(RoundRobin)
  5. Docker超详细基础教程
  6. 思科 路由与交换基础 实验一
  7. Python 中的“ %S“%用法
  8. Vue $refs 原理
  9. c#最新验证是否电话号码和手机号码
  10. 使用OpenCV获取图片亮度