2017 Multi-University Training Contest - Team 3

第三场前夕,早上五点才睡,九点半被宿舍的施工吵醒,再也没能睡着。比赛打到一个半小时就开始昏昏欲睡了。加上第三场比赛本身很难,中途AC2题的时候可以从RANK50一直排到RANK300。这场比赛不光是对算法能力的考验,更是对实现算法能力的考验。罚时成了RANK取胜的关键因素。


1005

把1看成整棵树的根. 问题相当于把 2\sim n2n 每个点一个 [1, k][1,k] 的标号. 然后根据最小斯坦纳树的定义,  (x, fa_x)(x,fax)  这条边的贡献是 x 子树内不同标号的个数目 dif_idifi . 那么显然有 dif_i\leq min(k, sz_i)difimin(k,szi) sz_iszi 表示子树大小. 可以通过构造让所有 dif_idifi 都取到最大值. 所以答案就是 \sum_{x = 2}^{n}{w[x][fa_x] * min(sz_x, k)}x=2nw[x][fax]min(szx,k) 时间复杂度 O(n)O(n) .

#include<bits/stdc++.h>


using namespace std;


typedef long long ll;
ll ans;


struct node{
int v,w;
node(int _v,int _w){
v=_v;
w=_w;
}
};


vector<node> e[1000005];


int n,k;


int sz[1000005];


void dfs(int id,int fa,int ww){
sz[id]=1;
for (int i=0;i<e[id].size();i++){
int ep=e[id][i].v;
if (ep==fa) continue;
int w=e[id][i].w;
dfs(ep,id,w);
sz[id]+=sz[ep];
}
if (fa==0) return;
int tmp=min(sz[id],k);
ans+=(ll)tmp*ww;
}


int main(){
while(scanf("%d %d",&n,&k)!=EOF)
{
for (int i=1;i<=n;i++) e[i].clear();
memset(sz,0,sizeof(sz));
for (int i=1;i<n;i++){
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
e[x].push_back(node(y,z));
e[y].push_back(node(x,z));
}
ans=0;
dfs(1,0,0);
printf("%lld\n",ans);
}
}


1008

注意到一个数字 xx 必然会被唯一表示成 a^2\times ba2×b 的形式.其中 |\mu(b)| = 1μ(b)=1 。 所以这个式子会把 [1, n^k][1,nk] 的每个整数恰好算一次. 所以答案就是 n^knk ,快速幂即可. 时间复杂度 O(\log k)O(logk) .

#include<cstdio>
#include<iostream>


typedef long long ll;


const ll MOD=1e9+7;


ll power(ll n,ll k)
{
if (k==0)
{
return 1;
}
ll tmp = power(n,k/2);
if (k&1) return tmp*tmp%MOD*n%MOD;
return tmp*tmp%MOD;
}


int main()
{
ll n,k;
int t=1;
while (scanf("%lld %lld",&n,&k)!=EOF)
{
n%=MOD;
ll ans=power(n,k);
ans+=MOD;
ans%=MOD;
printf("Case #%d: %lld\n",t++,ans);
}
return 0;
}


1011

一个签到题,目的在于吐槽浙江的高温

统计有多少数<=35<=35即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值