P3038 [USACO11DEC]牧草种植Grass Planting

2024-02-12 16:30

本文主要是介绍P3038 [USACO11DEC]牧草种植Grass Planting,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                               P3038 [USACO11DEC]牧草种植Grass Planting

题目描述

Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectional roads, such that there is exactly one path between any two pastures. Bessie, a cow who loves her grazing time, often complains about how there is no grass on the roads between pastures. Farmer John loves Bessie very much, and today he is finally going to plant grass on the roads. He will do so using a procedure consisting of M steps (1 <= M <= 100,000).

At each step one of two things will happen:

  • FJ will choose two pastures, and plant a patch of grass along each road in between the two pastures, or,

  • Bessie will ask about how many patches of grass on a particular road, and Farmer John must answer her question.

Farmer John is a very poor counter -- help him answer Bessie's questions!

给出一棵n个节点的树,有m个操作,操作为将一条路径上的边权加一或询问某条边的权值。

输入输出格式

输入格式:

 

  • Line 1: Two space-separated integers N and M

  • Lines 2..N: Two space-separated integers describing the endpoints of a road.

  • Lines N+1..N+M: Line i+1 describes step i. The first character of the line is either P or Q, which describes whether or not FJ is planting grass or simply querying. This is followed by two space-separated integers A_i and B_i (1 <= A_i, B_i <= N) which describe FJ's action or query.

 

输出格式:

 

  • Lines 1..???: Each line has the answer to a query, appearing in the same order as the queries appear in the input.

 

输入输出样例

输入样例#1:
4 6 
1 4 
2 4 
3 4 
P 2 3 
P 1 3 
Q 3 4 
P 1 4 
Q 2 4 
Q 1 4 
输出样例#1:
2 
1 
2 

 

树剖。。

  1 #include <ctype.h>
  2 #include <cstdio>
  3 #include <queue>
  4 
  5 const int MAXN=100010;
  6 
  7 int n,m,inr;
  8 
  9 int dfn[MAXN],dep[MAXN],id[MAXN],fa[MAXN];
 10 int top[MAXN],son[MAXN],siz[MAXN],rank[MAXN];
 11 
 12 struct SegmentTree {
 13     int l,r;
 14     int tag;
 15     int sum;
 16 };
 17 SegmentTree t[MAXN<<2];
 18 
 19 struct node {
 20     int to;
 21     int next;
 22 };
 23 node e[MAXN<<1];
 24 
 25 int head[MAXN],tot;
 26 
 27 inline void read(int&x) {
 28     int f=1;register char c=getchar();
 29     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
 30     for(;isdigit(c);x=x*10+c-48,c=getchar());
 31     x=x*f;
 32 }
 33 
 34 inline void add(int x,int y) {
 35     e[++tot].to=y;
 36     e[tot].next=head[x];
 37     head[x]=tot;
 38 }
 39 
 40 void Dfs_1(int now,int f) {
 41     dep[now]=dep[f]+1;
 42     siz[now]=1;
 43     fa[now]=f;
 44     for(int i=head[now];i;i=e[i].next) {
 45         int to=e[i].to;
 46         if(to==f) continue;
 47         Dfs_1(to,now);
 48         siz[now]+=siz[to];
 49         if(son[now]==-1||siz[son[now]]<siz[to]) son[now]=to;
 50     }
 51     return;
 52 }
 53 
 54 void Dfs_2(int now,int tp) {
 55     top[now]=tp;
 56     id[now]=++inr;
 57     rank[inr]=now;
 58     if(son[now]==-1) return;
 59     Dfs_2(son[now],tp);
 60     for(int i=head[now];i;i=e[i].next) {
 61         int to=e[i].to;
 62         if(to==son[now]||to==fa[now]) continue;
 63         Dfs_2(to,to);
 64     } 
 65     return;
 66 }
 67 
 68 inline void swap(int&x,int&y) {
 69     int t=x;x=y;y=t;
 70     return;
 71 }
 72 
 73 inline void down(int now) {
 74     t[now<<1].tag+=t[now].tag;
 75     t[now<<1].sum+=(t[now<<1].r-t[now<<1].l+1)*t[now].tag;
 76     t[now<<1|1].tag+=t[now].tag;
 77     t[now<<1|1].sum+=(t[now<<1|1].r-t[now<<1|1].l+1)*t[now].tag;
 78     t[now].tag=0; 
 79 }
 80 
 81 void build_tree(int now,int l,int r) {
 82     t[now].l=l;t[now].r=r;
 83     if(l==r) return;
 84     int mid=(l+r)>>1;
 85     build_tree(now<<1,l,mid);
 86     build_tree(now<<1|1,mid+1,r);
 87 }
 88 
 89 void modify(int now,int l,int r) {
 90     if(l<=t[now].l&&r>=t[now].r) {
 91         ++t[now].tag;
 92         t[now].sum+=t[now].r-t[now].l+1;
 93         return;
 94     }
 95     if(t[now].tag) down(now);
 96     int mid=(t[now].l+t[now].r)>>1;
 97     if(l<=mid) modify(now<<1,l,r);
 98     if(r>mid) modify(now<<1|1,l,r);
 99     t[now].sum=t[now<<1].sum+t[now<<1|1].sum;
100 }
101 
102 int query(int now,int l,int r) {
103     int ans=0;
104     if(l<=t[now].l&&r>=t[now].r) return t[now].sum;
105     if(t[now].tag) down(now);
106     int mid=(t[now].l+t[now].r)>>1;
107     if(l<=mid) ans+=query(now<<1,l,r);
108     if(r>mid) ans+=query(now<<1|1,l,r);
109     return ans;
110 }
111 
112 inline void Pre_query(char c,int x,int y) {
113     int ans=0;
114     while(top[x]!=top[y]) {
115         if(dep[top[x]]<dep[top[y]]) swap(x,y);
116         if(c=='P') modify(1,id[top[x]],id[x]);
117         else ans+=query(1,id[top[x]],id[x]);
118         x=fa[top[x]];
119     } 
120     if(dep[x]>dep[y]) swap(x,y);
121     if(c=='P') modify(1,id[x]+1,id[y]);
122     else ans+=query(1,id[x]+1,id[y]),printf("%d\n",ans);
123     return;
124 }
125 
126 int hh() {
127     char s[5];
128     read(n);read(m);
129     for(int i=1;i<=n;++i) son[i]=-1;
130     int t=n-1;
131     for(int x,y;t--;) {
132         read(x);read(y);
133         add(x,y);add(y,x);
134     }
135     Dfs_1(1,0);
136     Dfs_2(1,1);
137     build_tree(1,1,inr);
138     for(int x,y;m--;) {
139         scanf("%s",s);read(x);read(y);
140         Pre_query(s[0],x,y);
141     }
142     return 0;
143 }
144 
145 int sb=hh();
146 int main() {;}
代码

 

转载于:https://www.cnblogs.com/whistle13326/p/7434537.html

这篇关于P3038 [USACO11DEC]牧草种植Grass Planting的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703037

相关文章

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略 参考论文 无水印

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次!  完整论文+代码+数据结果链接在文末!  订阅后可查看参考论文文件 第一问 1.1 问题重述 这个问题围绕的是华北山区的某乡村,在有限的耕地条件下,如何制定最优的农作物种植策略。乡村有 34 块露天耕地和 20 个大棚,种植条件包括粮食作物、蔬菜、水稻和食用菌。除了要考虑地块的面积、种植季节等,还要确保

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究(完整论文,持续更新,大家持续关注,更新见文末名片 ) 摘要 在本文中,建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛模拟和鲁棒优化等多种模型的农作物种植优化模型。本文以某乡村为研究背景,考虑到该乡村的耕地资源有限、气候条件限制,以及未来可能存在的市场波动和种植风险,提出了优化农作物种植策略的数学模型,

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 一、第一问        问题描述:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持稳定,每季种植的农作物在当季销售。如果某种作物每季的总产量超过相应的预期销售量,超过部分不能正常销售。请针对以下两种情况,分别给出该乡村 2024~2030 年农作物的最优种植方案,将结果分别填入

2024 数学建模高教社杯 国赛(C题)| 农作物的种植策略 | 建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用等多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍,我们出发吧~ 完整内容可以在文章末尾领取! 第一个问题是:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于2023年保持稳定,每季种植的农作物在当季销售。要求针对以下两种情况,分别给出该乡村20

HDU 1849 Rabbit and Grass NIM游戏

Description 大学时光是浪漫的,女生是浪漫的,圣诞更是浪漫的,但是Rabbit和Grass这两个大学女生在今年的圣诞节却表现得一点都不浪漫:不去逛商场,不去逛公园,不去和AC男约会,两个人竟然猫在寝食下棋……  说是下棋,其实只是一个简单的小游戏而已,游戏的规则是这样的:  1、棋盘包含1*n个方格,方格从左到右分别编号为0,1,2,…,n-1;  2、m个棋子放在棋盘

uva10382 - Watering Grass(区间覆盖变形)

题目:uva10382 - Watering Grass(区间覆盖变形)   题目大意:要给一片草坪浇水,给定草坪的长度和宽度,给出每个喷头的圆心C和喷水的半径R,问最少要几个喷头可以给整片草坪都浇上水。   解题思路:区间覆盖问题的变形,因为草坪有宽度W,所以这个每个喷头的有效范围是[C- sqrt(R* R - 0.25 * W * W   ,  C + sqrt (R*R - 0.2

助力樱桃智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的事实映入眼帘——在这片广袤的土地上,农业生产仍然大量依赖人力,而非智能机械化。与此同时,国外的农业生产模式早已进入全面机械化的新时代。面对这一现状,我们不禁要思考:如何将AI技术融入农业,引领农业生产走向数字化、智能化?

基础农作物喜好种植时间肥力值区间等基础信息

以下是在表格中加入肥料种类和肥力值区间后的内容: 作物类型偏好种植时间收获时间施肥时间浇灌时间喷洒农药时间肥料种类肥力值区间水稻喜水热充足、地势平坦南方早稻 3-4 月,晚稻 7 月左右;北方单季稻 5 月左右南方早稻 7 月左右,晚稻 10-11 月;北方单季稻 9-10 月基肥在种植前,追肥分多次进行根据生长需求适时浇灌根据病虫害情况适时喷洒复合肥、氮肥等80-120小麦耐寒、耐旱,适应较广

助力草莓智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的事实映入眼帘——在这片广袤的土地上,农业生产仍然大量依赖人力,而非智能机械化。与此同时,国外的农业生产模式早已进入全面机械化的新时代。面对这一现状,我们不禁要思考:如何将AI技术融入农业,引领农业生产走向数字化、智能化?

46.SQLserver中按照多条件分组:查询每个地方的各种水果的种植数量,新增时,一个地方同时有几种水果,只插入一条记录,同时多种水果之间使用|隔开

1.SQLserver中按照多条件分组 ,分组条件包括(一个字段使用|进行分割,如:apple|orange,查询时,apple和orange分别对应一条数据) 例如:SQL如下: SELECT FROM (SELECT CDFBM '地方编码', CDFMCC '地方名称',  COUNT(CXXID) '种植数量' (CASE CSGMC WHEN '001' THEN '苹果' WH