鱼C论坛

 找回密码
 立即注册
查看: 2380|回复: 34

[已解决]【C++板块提升计划】梦想护卫舰 第15期 画树

[复制链接]
发表于 2023-1-27 16:21:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sfqxx 于 2023-2-24 17:40 编辑

你们顺着藏宝图的方向,走到了一个藏有10w鱼币的宝箱(剧情需要,请勿当真!
但是!要想打开它,休想那么容易
这时,有两个人走了过来,他们能给你们一些提示……
但!需要作答两道超级难的题目
好了咱们先看题:
第一题:
玘给了寒一棵编号为 1~n 的树,这棵树上每个点都有一个点权,同时有些边有边权,有些边没有边权。可是玘把每一个点的点权删除了(真的6)。寒只知道点权都是整数,而且在 l 和 r 之间(包含端点)。而且,点权和边权有着下面的特殊关系:
对于有边权的边,要求连接的两个点的点权和为边权。
对于没有边权的边,无限制。
玘问寒这棵树有多少种不同的点权填写方式。两种填写方式不同,当且仅当至少存在一个点的点权不同。可是寒不会做这个题。

寒请你解决这个问题。回答正确即可获得第一条线索


输入格式:

本题有多组测试数据。

第一行一个整数 T,代表测试数据组数。

对于每一组测试数据:

第一行三个整数 n,l,r,代表树上点的个数是 n,点权的范围是 [l,r]。

接下来 n-1 行,每行先输入一个整数 op,op=0 表示这条边没有边权,op=1 表示这条边有边权。

如果 op=0,再输入两个整数 u,v,表示这条边连接 u,v两个点。

如果 op=1,再输入三个整数 u,v,w,表示有一条权值为 w 的边连接 u,v 两个点。

输出格式:
对于每个测试点,输出一行一个整数,代表点权填写方式的个数。答案对 10^9+7 取模。

输入与输出样例
输入:
  1. 2
  2. 6 0 4
  3. 1 1 2 2
  4. 1 2 3 4
  5. 1 3 4 2
  6. 0 2 5
  7. 1 4 6 3

  8. 6 -1 4
  9. 1 1 2 4
  10. 0 2 3
  11. 0 3 4
  12. 0 2 5
  13. 0 4 6
复制代码

输出:
  1. 5
  2. 6480
复制代码



说明/提示

样例解释
对于样例的第一组测试数据,可以得到下图:
屏幕截图_20230127_155719.png
5种填写方式:
{0,2,2,0,0,3}
{0,2,2,0,1,3}
{0,2,2,0,2,3}
{0,2,2,0,3,3}
{0,2,2,0,4,3}
可以证明,不存在别的填写方式。

样例输入中,为了直观,添加了空行。实际数据中不存在多余空行。

数据范围

本题采用捆绑测试。
屏幕截图_20230127_160204.png
特殊性质:保证每条边都无边权。

对于 100% 的数据,保证 1≤T≤5,1≤n≤2×10^5
,1≤∑(求和,其实我没见过)n≤10 ^6,-10^9≤l≤r≤10^9
,-10^ 9≤w≤10 ^9
,op∈(这个不明白,谁知道在评论区回答可以获得1贡献){0,1}。

注:1.本题非原创,见戳他(修复中,先别点)
2.本期没有答案

最佳战士:暂无
奖励:10荣誉+6贡献(通过判定)
使用语言:暂无

(第二题明天再说吧
18:00前回答会有20鱼币额外奖励哦 (已结束)
18:31+10分钟(考虑到不可抗因素)前回答有10鱼币(已结束)
19:01前8鱼币(已结束)
19:31前5鱼币  (已结束)
20:00前3鱼币(结束)
20:31前1鱼币(结束)
注:此活动仅限一人,若一人回答对,剩下的直接作废

https://fishc.com.cn/thread-223717-1-1.html

鱼币福利!
保底2鱼币活动开始!
万水千山总是情,给个评分行不行
最佳答案
2023-1-29 12:20:58
感觉好像有点思路,试着写了一个
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. const uint64_t mod = 1000000007;
  5. struct edge{
  6.     int64_t weight;
  7.     uint32_t destination;
  8.     uint32_t next;
  9. };
  10. struct edge edges[(unsigned int)4e5];
  11. uint32_t head[(unsigned int)2e5 + 1];
  12. uint32_t next_edge;
  13. uint32_t n;
  14. int64_t l, r;
  15. void insert_edge(uint32_t source, uint32_t destination, int64_t weight){
  16.     edges[next_edge].weight = weight;
  17.     edges[next_edge].destination = destination;
  18.     edges[next_edge].next = head[source];
  19.     head[source] = next_edge++;
  20. }
  21. void trace(
  22.     uint32_t target,
  23.     int64_t p_weight, int64_t p_low, int64_t p_high,
  24.     int64_t* c_low, int64_t* c_high
  25. ){
  26.     uint32_t start = head[target];
  27.     int64_t low = p_weight - p_high;
  28.     int64_t high = p_weight - p_low;
  29.     head[target] |= 1 << 31;
  30.     int64_t child_low, child_high;
  31.     for(uint32_t edge = start; edge != 0x7fffffff; edge = edges[edge].next){
  32.         if(head[edges[edge].destination] >> 31 == 1) continue;
  33.         if(edges[edge].weight - low < l || edges[edge].weight - high > r){
  34.             low = 1;
  35.             high = 0;
  36.             break;
  37.         }
  38.         if(edges[edge].weight - r > low) low = edges[edge].weight - r;
  39.         if(edges[edge].weight - l < high) high = edges[edge].weight - l;
  40.         trace(edges[edge].destination, edges[edge].weight, low, high, &child_low, &child_high);
  41.         if(child_low > child_high){
  42.             low = 1;
  43.             high = 0;
  44.             break;
  45.         }
  46.         if(edges[edge].weight - child_high > low) low = edges[edge].weight - child_high;
  47.         if(edges[edge].weight - child_low < high) high = edges[edge].weight - child_low;
  48.     }
  49.     *c_low = low;
  50.     *c_high = high;
  51. }
  52. void group_main(){
  53.     uint64_t result = 1;
  54.     scanf("%u%ld%ld", &n, &l, &r);
  55.     int64_t minimum_weight = l + l;
  56.     int64_t maximum_weight = r + r;
  57.     for(uint32_t i = 1; i <= n; i++) head[i] = 0x7fffffff;
  58.     next_edge = 0;
  59.     uint8_t op;
  60.     uint32_t source, destination;
  61.     int64_t weight;
  62.     for(uint32_t i = 1; i < n; i++){
  63.         scanf("%hhu", &op);
  64.         if(op == 0) scanf("%*u%*u");
  65.         else if(op == 1){
  66.             scanf("%u%u%ld", &source, &destination, &weight);
  67.             if(weight > maximum_weight || weight < minimum_weight){
  68.                 printf("0\n");
  69.                 return;
  70.             }
  71.             insert_edge(source, destination, weight);
  72.             insert_edge(destination, source, weight);
  73.         }
  74.     }
  75.     int64_t left, right;
  76.     for(uint32_t i = 1; i <= n; i++){
  77.         if(head[i] >> 31 == 0){
  78.             trace(i, l + r, l, r, &left, &right);
  79.             if(left > right){
  80.                 result = 0;
  81.                 break;
  82.             }
  83.             result = ((right - left + 1) * result) % mod;
  84.             if(result == 0) break;
  85.         }
  86.     }
  87.     printf("%lu\n", result);
  88. }
  89. int main(){
  90.     uint8_t T;
  91.     scanf("%hhu", &T);
  92.     for(uint8_t i = 0; i < T; i++) group_main();
  93.     return 0;
  94. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zhangjinxuan + 5 + 5 这道题巨难!千万别去回答!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-27 17:02:39 | 显示全部楼层
emmm......什么叫边权?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 18:15:50 | 显示全部楼层
元豪 发表于 2023-1-27 17:02
emmm......什么叫边权?

布吉岛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 18:32:48 | 显示全部楼层

那你怎么发的题目?????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 18:33:36 | 显示全部楼层
元豪 发表于 2023-1-27 18:32
那你怎么发的题目?????

看原创……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 20:55:22 | 显示全部楼层

。。你原链接呢??点进去是不存在啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 21:09:17 | 显示全部楼层
hziyan 发表于 2023-1-27 20:55
。。你原链接呢??点进去是不存在啊

这……
我调一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 21:10:36 | 显示全部楼层
《难度适中》

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 21:16:08 | 显示全部楼层
谢谢分享原创知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 21:16:49 | 显示全部楼层
。。看了看题目,那个20:31前1鱼币(没开始)看得很绝望,毕竟已经九点都结束了

浅浅分析一下,关键句是
对于有边权的边,要求连接的两个点的点权和为边权。
对于没有边权的边,无限制。

其实不用管点权和边权是个啥(硬要理解可以理解为权重?)

可以简单理解就是一堆包含数点和线,连接线的两点代表的数之和要等于线代表的数
配合那个图就很好理解了,

那么在理解以上条件后,题目就是要求出在这些条件限制下的可能解有几个(取模是为了防止"猜"吧)
至于
op∈(这个不明白,谁知道在评论区回答可以获得1贡献){0,1}

这个∈是包含,高中知识,大概就是op必须是0或者1两个数

评分

参与人数 1贡献 +2 收起 理由
sfqxx + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 21:24:33 | 显示全部楼层
tomok 发表于 2023-1-27 21:16
谢谢分享原创知识

原创个灯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 21:31:50 | 显示全部楼层
  1. 2.本期没有答案
复制代码

是因为你是瞎选的题,啊呵呵,我说随便选你还真的就随便选啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 22:21:20 From FishC Mobile | 显示全部楼层
zhangjinxuan 发表于 2023-1-27 21:24
原创个灯

我***什么时候说原创了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-27 22:24:47 | 显示全部楼层
zhangjinxuan 发表于 2023-1-27 21:31
是因为你是瞎选的题,啊呵呵,我说随便选你还真的就随便选啊

不就那个比赛题吗?
445通过1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 22:35:46 | 显示全部楼层
sfqxx 发表于 2023-1-27 22:24
不就那个比赛题吗?
445通过1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-28 11:26:45 From FishC Mobile | 显示全部楼层
hziyan 发表于 2023-1-27 21:16
。。看了看题目,那个20:31前1鱼币(没开始)看得很绝望,毕竟已经九点都结束了

浅浅分析一 ...

题目有点难,
你现在回答保底2鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-28 12:34:50 | 显示全部楼层
sfqxx 发表于 2023-1-28 11:26
题目有点难,
你现在回答保底2鱼币

。。何止有点难,逻辑判断部分我目前只有一种暴力穷举,我相信大部分人倒在这个地方了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-28 12:41:44 | 显示全部楼层
hziyan 发表于 2023-1-28 12:34
。。何止有点难,逻辑判断部分我目前只有一种暴力穷举,我相信大部分人倒在这个地方了

我去看看现在的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-28 12:42:40 | 显示全部楼层
hziyan 发表于 2023-1-28 12:34
。。何止有点难,逻辑判断部分我目前只有一种暴力穷举,我相信大部分人倒在这个地方了

不整了,再整伤身,我今天忙,忙完先(今天可能一整天都忙)再看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-28 13:03:31 | 显示全部楼层
sfqxx 发表于 2023-1-27 22:21
我***什么时候说原创了

我去!还真的瞎选啊!

我甚至怀疑这题高达 提高+/省选-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表