带 gcd 的纯模拟。( gcd 就是求最大公约数)

gcd 用来处理分数相加时的分母通分和分数的约分,

通过 gcd 珂以求出 lcm (最小公倍数):

\\(\\operatorname{lcm}(x,y)=\\frac{x \\times y}{\\gcd(x,y)}\\)

开个结构体存分数,然后就珂以愉快地拓扑排序了。

最后几个点 WA 是因为 long long 不够用,

开个 __int128 就能过了。

考场上就乖乖写高精吧(逃

代码:

#include

#include

#include

#include

#include

#include

#include

#define Rei register int

#define ll __int128//注意是两个下划线!

using namespace std;

template

inline void read(T &x) {

x=0;

char f=0,c;

while(c=getchar(),!isdigit(c)) if(c==\'-\') f=1;

if(f) while(isdigit(c)) x=x*10-c+48,c=getchar();

else while(isdigit(c)) x=x*10+c-48,c=getchar();

}

void write(__int128 x) {//__int128需要手写输入输出

if(x/10) write(x/10);

putchar(x%10+\'0\');

}

inline ll gcd(ll x,ll y) {//辗转相除法求gcd

ll t;

while(y) t=x%y,x=y,y=t;

return x;

}

const int N=1e5+2;

int n,m,cnt,rbq,son;

int h[N],rd[N],d[N];

struct node {

int next,to;

node(int next=0,int to=0) {

this->next=next,this->to=to;

}

} b[N*5];

struct fenshu {

ll fenzi,fenmu;

fenshu(ll fenzi=0,ll fenmu=1) {//注意分母不能为0

this->fenzi=fenzi,this->fenmu=fenmu;

}

void huajian() {//分数的化简

ll g=gcd(fenzi,fenmu);

fenzi/=g,fenmu/=g;

}

} O2[N];

fenshu jia(fenshu x,fenshu y) {//这里自己推一下就懂了

ll g=gcd(x.fenmu,y.fenmu);

ll k1=y.fenmu/g,k2=x.fenmu/g;

return fenshu(x.fenzi*k1+y.fenzi*k2,x.fenmu*k1);

}

inline void link(int u,int v) {

b[++cnt]=node(h[u],v),h[u]=cnt,++rd[v];

}

queue q;

vector ans;

void tuopu() {//拓扑排序

for(Rei i=1; i<=n; ++i) {

if(!rd[i]) {

q.push(i);

O2[i]=fenshu(1,1);

}

}

while(!q.empty()) {

rbq=q.front(),q.pop();

if(!d[rbq]) {

ans.push_back(rbq);

continue;

}

O2[rbq].fenmu*=d[rbq];//水分流

O2[rbq].huajian();

for(Rei i=h[rbq]; i; i=b[i].next) {

--rd[son=b[i].to];

O2[son]=jia(O2[son],O2[rbq]);

O2[son].huajian();

if(!rd[son]) {

q.push(son);

}

}

}

}

int main() {

read(n),read(m);

for(Rei i=1; i<=n; ++i) {

read(d[i]);

for(Rei j=1; j<=d[i]; ++j) {

read(rbq),link(i,rbq);

}

}

tuopu();

sort(ans.begin(),ans.end());

for(int i=0; i

write(O2[ans[i]].fenzi),putchar(\' \');

write(O2[ans[i]].fenmu),putchar(\'\\n\');

}

return 0;

}

第一次写题解,请多包涵。

水坝排水系统c语言,题解 NOIP2020 T1 排水系统相关推荐

  1. NOIP2020 T1排水系统

    传送门luoguP7113 我们先手动模拟一下: 虽然图画的丑,也画的水. 但我们不难发现: 流向子节点的水等于父节点的水除以出度. 由于要得到某个点的流量,我们要先计算出父节点的流量,这样我们不难发 ...

  2. NOIP 2020 T1 排水系统(拓扑排序)

    NOIP 2020 T1 排水系统 题解 很显然是拓扑排序,按题意直接模拟复杂度仅仅是 O ( n ) O(n) O(n)的. 但是涉及到分数的加法,通分会爆变量范围吗? 一开始以为最大只是 5 11 ...

  3. 华为机考HJ4字符串分隔C语言题解

    华为机考HJ4字符串分隔C语言题解 好家伙,今天的while循环检测文件末尾又好使了. 把白给打在公屏上. 主要思路就是求余的花样使用. 首先把字符串数组里的内容全部放入新的数组. 新的数组每满八个就 ...

  4. 力扣 两数相加 C语言 题解

    ** 力扣 两数相加 C语言 题解 ** 文章目录 力扣 两数相加 C语言 题解 一.完整题目 二.解题思路 二.编写代码 四.测评结果 五.总结评价 一.完整题目 给你两个非空的链表,表示两个非负的 ...

  5. 「NOIP2020」排水系统(water)

    题解1 我成功地把一道 1000 bytes ⁡ 1000\operatorname{bytes} 1000bytes 的签到题活生生地整成了 5000 bytes ⁡ 5000\operatorna ...

  6. 【蓝桥真题5】带三百人训练了十天精选蓝桥真题,看看他们都练些什么(三门语言题解)

    ⭐️引言⭐️ 大家好啊,我是执梗.最近一周多都没有更新文章了,因为确实是非常忙,在上篇文章了一下开启了蓝桥打卡31日的活动.每天忙着群里管理解答,统计打卡,寻找真题,根本没有时间更新文章.每天也过的非 ...

  7. 牛客网C语言题解1-指针

    说明:笔者水平有限,这当做个人学习C语言的笔记,如有错误欢迎指出和讨论. 题目 求程序运行结果 #include<stdio.h> void foobar(int a, int *b, i ...

  8. 【猜名次】-C语言-题解

    1. 描述: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三: B选手说:我第二,E第四: C选手说:我第一,D第二: D选手说:C最后,我第三: E选手说:我第 ...

  9. c程序设计语言 题解,C程序设计语言综合设计》 解题报告

    <C程序设计语言综合设计> 解题报告>由会员分享,可在线阅读,更多相关<C程序设计语言综合设计> 解题报告(16页珍藏版)>请在人人文库网上搜索. 1.程序设计语言 ...

最新文章

  1. 第一阶段团队成员贡献打分
  2. Adnroid提高效率之资源移动
  3. ntnub原理怎么看_老电工由浅入深带你入门学PLC的工作原理和梯形图的编程规则...
  4. 给公司部门设计的SOA架构
  5. php 天比较,php 计算距离天的时间还有多少天
  6. shell输入输出重定向
  7. linux上如何查看具体的命令属于哪个安装包
  8. (译)使用cocos2d和box2d制作滚动背景
  9. web.xml中配置启动时加载的servlet,load-on-starup
  10. pytorch实现孪生神经网络对人脸相似度进行识别
  11. 校园实践-2015级软工07111501班级-校园二手交易项目组
  12. 共享打印机服务器脱机状态,共享打印机脱机无法打印
  13. Ajax选项卡、隔行换色、弹出遮罩层…
  14. HTML+CSS静态页面游戏网站设计——腾讯游戏(页)学生HTML个人网页作业作品下载 个人网页设计制作 大学生个人网站作业模板 简单个人网页制作
  15. Day16:数据仓库设计
  16. java迷你DVD管理器
  17. 牢骚:各种奇奇怪怪的问题。。。
  18. A 0.18um CMOS SOC for a 100-m-Range 10-Frame/s 200x96 pixel time-of-flight Depth Sensor翻译
  19. openEuler 社区 2022 年 12 月运作报告
  20. 数学知识——约数(因数)

热门文章

  1. AcceptEx与完成端口(IOCP)结合实例
  2. java 程序计数器_Java中的程序计数器是什么
  3. 【node错误】npm ERRInvalid name:解决
  4. Splitbutton
  5. JavaEE 网络编程示例1 UDP套接字数据报编程 == 一发一收
  6. 基于C语言的词法分析实验
  7. java hdfs文件_使用Java访问HDFS中的文件
  8. 史上最全的nginx安全访问控制配置
  9. 0x00 -- CSAPP -- 概览
  10. 每日阅读2021.12.10