【问题描述】

小美有 n 个点 m 条边。

让你给每个点一个正整数编号。

每条边有两个属性,相连的两个点的编号的 GCD 和 LCM。

题目保证整张图连通。

让你构造出一个编号。

【输入格式】

从文件 math.in 中读入数据。

第一行两个正整数 n 和 m。

接下去m行每行 4 个正整数 xi,yi,gcdi,lcmi。

【输出格式】

输出到文件 math.out 中。

如果是有解:

第一行一行 YES。

第二行 n 个数字表示编号。

否则输出一行NO。

【样例】

【样例输入】

1 0

【样例输出】

YES 1

【样例输入】

2 1

1 2 1 3

【样例输出】

YES 1 3

【样例输入】

3 2

3 2 1 2

3 1 1 10

【样例输出】

YES 5 1 2

【样例输入】

2 1

1 2 3 7

【样例输出】

NO

【数据规模】

对于\(100\%\)的数据\(2\le n \le 100,n-1 \le m \le n*(n-1)/2,1\le gcdi, lcmi \le 10^6\)。

题解

这题其实就是一道暴力题,是根据\([a, b] \times (a, b) = a\times b\)。已知\(a\times b\),暴力枚举\(a\),然后把整张图dfs一遍判断其正确性即可。

不得不说:大力出奇迹!

另外,记得开long long。

题目加强版:CF 60C

代码

#include <cctype>
#include <cstdio>
#include <cstring> typedef long long LL;
#define int long long #define dd c = getchar()
inline void read(int& x)
{
x = 0;
char dd;
bool f = false;
for(; !isdigit(c); dd)
if(c == '-')
x = -x;
for(; isdigit(c); dd)
x = (x<<1) + (x<<3) + (c^48);
if(f) x = -x;
}
#undef dd inline int gcd(int __n, int __m)
{
while (__n)
{
int __t = __m % __n;
__m = __n;
__n = __t;
}
return __m;
} const int maxn = 105; int n, m; int ans[maxn]; struct edge
{
LL cheng;
int t;
int ne;
int gcdd;
} e[maxn*maxn]; int first[maxn];
bool vis[maxn]; int mm;
inline void add_edge(int f, int t, LL cheng, int gcdd)
{
e[++mm].ne = first[f];
e[mm].t = t;
e[mm].cheng = cheng;
e[mm].gcdd = gcdd;
first[f] = mm; e[++mm].ne = first[t];
e[mm].t = f;
e[mm].cheng = cheng;
e[mm].gcdd = gcdd;
first[t] = mm;
} inline bool dfs(int n, int last)//dfs检验答案正确性
{
vis[n] = true;
for(int i = first[n]; i; i = e[i].ne)
{
int to = e[i].t;
if(to == last) continue;
if(vis[to])
{
if((ans[to]*ans[n] != e[i].cheng) || (gcd(ans[to], ans[n]) != e[i].gcdd))
return false;
}
else
{
ans[to] = e[i].cheng / ans[n];
if(gcd(ans[to], ans[n]) != e[i].gcdd)
return false;
if(!dfs(to, n))
return false;
}
}
return true;
} inline void print()
{
puts("YES");
for(int i = 1; i <= n; ++i)
printf("%lld ", ans[i]);
} inline void search()
{
vis[1] = true;
if(!first[1])
{
puts("NO");
return;
}
LL k = e[first[1]].cheng;
for(int i = 1; i*i <= k; ++i)//暴力枚举所有可能情况
if(!(k%i))
{
ans[1] = i;
memset(vis, 0, sizeof(vis));
if(dfs(1, 0))
{
print();
return;
}
ans[1] = k/i;
memset(vis, 0, sizeof(vis));
if(dfs(1, 0))
{
print();
return;
}
}
puts("NO");
} signed main()
{
freopen("math.in", "r", stdin);
freopen("math.out", "w", stdout);
scanf("%lld%lld", &n, &m);
if(n == 1)
{
puts("YES\n1");
return 0;
}
for(int i = 1; i <= m; ++i)
{
int f, t, gcdd, lcmm;
read(f), read(t), read(gcdd), read(lcmm);
add_edge(f, t, (LL)(gcdd*lcmm), gcdd);
}
search();
return 0;
}

20180520模拟赛T1——math的更多相关文章

  1. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  2. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  3. 20180520模拟赛T3——chess

    [问题描述] 小美很喜欢下象棋. 而且她特别喜欢象棋中的马. 她觉得马的跳跃方式很独特.(以日字格的方式跳跃) 小芳给了小美一张很大的棋盘,这个棋盘是一个无穷的笛卡尔坐标. 一开始\(time=0\) ...

  4. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  5. [模拟赛] T1 高级打字机

    Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...

  6. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  7. [NOIP2018校模拟赛]T1 阶乘

    题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...

  8. [NOIP2018校模拟赛]T1聚会 party

    题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...

  9. 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

    二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...

随机推荐

  1. Azure DevOps Server (TFS) 修改Git文件大小限制

    签入Git的所有文件将永远保留在存储库中,限制大文件签入到代码库,可以增加磁盘使用效率,提高系统备份还原等日常维护的效率. 通过下面的设置,团队项目管理员可以阻止超过特定大小的文件进入存储库.如果推送 ...

  2. [EXP]CVE-2019-0604 Microsoft SharePoint RCE Exploit

    研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是都乱的. 剑桥大学的研究结果,当单词的字母顺序颠倒时,你仍旧可以明白整个单词的意思.其中重要的是:只要单词的第一个字母和 ...

  3. C# 读取配置指定Config文件--亲测通过

    直接上代码: public class ConfigUtils { public static String GetKey(String configPath,String key) { Config ...

  4. [转帖]美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题

    美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题 博客分类: redis 运维 redis clustercluster-node-timeoutfailover  转载请 ...

  5. JMeter扩展插件实现对自定义协议进行支持 转

    本文版权归xmeter.net 所有.欢迎转载,转载请注明出处. 摘要## JMeter本身提供了插件机制,允许第三方扩展JMeter以支持JMeter不支持的协议的测试.本文以扩展一个简单的Apac ...

  6. 安装Windows10出现无法识别磁盘时的解决方案

    由于前些日子对deepin系统比较感兴趣,一时兴起把备用机刷成了deepin,奈何还是过分依赖windows下的软件,又不得不再刷回Win10. 但由于Linux支持的磁盘格式与Windows不同,在 ...

  7. 【题解】有限制的排列 [51nod1296]

    [题解]有限制的排列 [51nod1296] 传送门:有限制的排列 \([51nod1296]\) [题目描述] 给出 \(n,m_1,m_2\) 和 \(\{a[1],a[2]...a[m_1]\} ...

  8. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug

    作者:Xuejie 原文链接:https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/ Ner ...

  9. kafka broker Leader -1引起spark Streaming不能消费的故障解决方法

    一.问题描述:Kafka生产集群中有一台机器cdh-003由于物理故障原因挂掉了,并且系统起不来了,使得线上的spark Streaming实时任务不能正常消费,重启实时任务都不行.查看kafka t ...

  10. Spring Boot 框架下使用MyBatis访问数据库之基于XML配置的方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...