BZOJ 2152 Luogu 2634——聪聪可可

本文介绍了一道名为“聪聪可可”的BZOJ2152/Luogu2634的算法题解。该题要求计算两点间路径和为3的倍数的概率。文章详细解释了通过记录路径长度模3的状态,并利用这些状态计算最终概率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BZOJ 2152  Luogu 2634——聪聪可可

题意

求两点之间路径和为3的倍数占的概率(最简)

解题思路与BZOJ1468差不多,

不过本题在计算经过某个点的次数时用了个ans数组,

对路径长度模3,得到的是0或1或2,但仍需要去重。

返回的值应是ans[0]*ans[0]+ans[1]*ans[2]*2。

为什么呢?

题目要求是3的倍数,所以0+0还是三的倍数,1+2也是三的

倍数,但是这里必须乘2,可以(2,3),当然也可以(3,2)。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 20010
using namespace std;
struct LINK{
    int to,next,v;
}e[maxn*2];
int deep[maxn],Distance[maxn],Maxsize[maxn],size[maxn],temp,tot,head[maxn],vis[maxn],root,k,ans[3],an;
inline char Getchar(){
    static char BUF[16384],*S=BUF,*T=BUF;
    return(S==T)&&(T=(S=BUF)+fread(BUF,1,16384,stdin),S==T)?EOF:*S++;
}
inline int read(){
    int w=0;char c=Getchar();
    while(c<'0'||c>'9') c=Getchar();
    while(c>='0'&&c<='9'){
        w=w*10+c-48;
        c=Getchar();
    }
    return w;
}
//inline int gcd(int x,int y){ 
//    int t;
//  while(y){  
//      t=x%y;
//      x=y;y=t;
//  }
//  return x;
//}
inline int gcd(int a,int b)  
{  
    return b==0?a:gcd(b,a%b);  
}  
inline void add(int x,int y,int w){
    tot++;
    e[tot].to=y;
    e[tot].next=head[x];
    e[tot].v=w;
    head[x]=tot;
}
inline void getroot(int x,int fa){
    size[x]=1;Maxsize[x]=0;
    for(int i=head[x];i;i=e[i].next){
        if(!vis[e[i].to]&&e[i].to!=fa){
            getroot(e[i].to,x);size[x]+=size[e[i].to];Maxsize[x]=max(Maxsize[x],size[e[i].to]);
        }
    }
    Maxsize[x]=max(Maxsize[x],temp-size[x]);
    if(Maxsize[x]<Maxsize[root]) root=x;
}
inline void getdeep(int x,int fa){
    ans[Distance[x]]++;
    for(int i=head[x];i;i=e[i].next){
        if(!vis[e[i].to]&&e[i].to!=fa){
            Distance[e[i].to]=(Distance[x]+e[i].v)%3;getdeep(e[i].to,x);
        }
    }
}
inline int answer(int x,int w){
    memset(ans,0,sizeof(ans));
    Distance[x]=w;
    getdeep(x,0);
    return ans[0]*ans[0]+ans[1]*ans[2]*2;
}
inline void solve(int x){
    an+=answer(x,0);vis[x]=1;
    for(int i=head[x];i;i=e[i].next){
        if(!vis[e[i].to]){
            an-=answer(e[i].to,e[i].v);temp=size[e[i].to];root=0;
            getroot(e[i].to,0);solve(root);
        }
    }
}
int main(){
    int n,i,x,y,v;
    n=read();
    for(i=1;i<n;i++){
        x=read();y=read();v=read();
        add(x,y,v%3);add(y,x,v%3);
    }
    Maxsize[0]=n+1;
    temp=n;
    getroot(1,0);solve(root);
    int l=gcd(n*n,an);
    printf("%d/%d",an/l,n*n/l);
    return 0;
}
聪聪可可

 

转载于:https://www.cnblogs.com/Fish-/p/8277010.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值