ZOJ 3824 Fiber-optic Network ~莫比乌斯

若先确定父结点的取值为A
  设f(i)为子结点取值和A的gcd为i,且子结点为根的子树相邻结点都互质的方案数
  设F(i)为子结点取值和A的gcd为i的倍数,且子结点为根的子树相邻结点都互质的方案数
  则f(1) = sigma(mu[d] * F(d)) 条件 d是A的因子
想到,确定一个父结点,一个子结点,就能确定一棵子树,于是我将每条边分解成两条有向边。数组F[e][j]记录的是有向边e起点作为父结点,以终点为根结点,且根结点取值为j的倍数的方案数
每个结点对父亲取值为A的贡献是sigma(mu[d] * F(d))(d是A的因子)
每个结点的方案数就是每个取值的子结点贡献的乘积再求和

直接枚举每个点,求F[][]的值,需要剪枝,若这条有向边被访问过,说明这颗子树已经求过了。


#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include 
                
                  #include 
                  using namespace std; #define rep(i,n) for(int i=0; i 
                  
                    = N) break; use[i*pri[j]] = 1; if(i % pri[j] == 0) { mu[i*pri[j]] = 0; break; } mu[i*pri[j]] = -mu[i]; } } } void Cal(int fa,int u) { int tt = g[fa][u]; // 有向边编号 if(fa != u && pa[tt]) return; pa[tt] = 1; for(int i=L[u]; i<=R[u]; i++) cnt[u][i] = 1; repe(v,n) if(g[u][v] && v != fa) { Cal(u,v); mst(temp,0); tt = g[u][v]; repe(i,R[u]) { for(int j=i; j<=R[u]; j+=i) { temp[j] = (temp[j] + mu[i] * F[tt][i] % MOD) % MOD; } } // temp 暂时记录这个子结点对当前结点的各个值的贡献 for(int i=L[u]; i<=R[u]; i++) if(temp[i]) cnt[u][i] = cnt[u][i] * temp[i] % MOD; // cnt[u][i] 记录u结点取值i的方案数 } tt = g[fa][u]; mst(F[tt],0); for(int i=R[u]; i>=1; i--) { for(int j=(L[u] + i - 1) / i * i; j<=R[u]; j+=i) { F[tt][i] += cnt[u][j]; F[tt][i] %= MOD; } } } int main() { //freopen("out.txt","w",stdout); mobius(); int T,a,b; scanf("%d",&T); while(T--) { scanf("%d",&n); repe(i,n) scanf("%d",L+i); repe(i,n) scanf("%d",R+i); mst(g,0); rep(i,n-1) { //a = i + 1;b = i + 2; scanf("%d%d",&a,&b); g[a][b] = 2 * i + 1; g[b][a] = 2 * i + 2; } mst(pa,0); for(int i=1; i<=n; i++) { Cal(i,i); } ll cnt[N]; for(int i=1; i<=n; i++) { for(int j=L[i]; j<=R[i]; j++) cnt[j] = 1; for(int j=1; j<=n; j++) if(g[i][j]) { mst(temp,0); for(int d=1; d<=R[i]; d++) { for(int o=d; o<=R[i]; o+=d) { temp[o] = (temp[o] + mu[d] * F[g[i][j]][d] % MOD) % MOD; } } for(int d=L[i]; d<=R[i]; d++) cnt[d] = cnt[d] * temp[d] % MOD; } ll ans = 0; for(int j=L[i]; j<=R[i]; j++) ans = (ans + cnt[j] * j % MOD) % MOD; ans = (ans + MOD) % MOD; if(i > 1) printf(" "); printf("%lld",ans); }printf("\n"); } return 0; } 
                   
                 
                
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值