【每日一题】4月3日 Shortest Path

Shortest Path

https://ac.nowcoder.com/acm/problem/13886

题面


Today HH becomes a designer, and he faces a problem so he asks you for help.
Treeisland is a country with n cities and n−1 two-way road and from any city you can go to any other cities.
HH the designer is going to design a plan to divide n city into n/2 pairs so that the sum of the length between the n/2 pairs city is minimum.
Now HH has finished it but he doesn't know whether it's true so he ask you to calculate it together.
It's guaranteed that n is even.


题解

今天的题很简单啊~
首先我们仔细观察一下样例2,可以发现我们好像不论怎么选择 所得到的解都是所有边的权值和。那什么情况下能减少这个最终答案呢?观察样例1,很容易看出来当一条边的两边的点数都为偶数时,那这条边就不需要被选择了。
所以我们先统计一下所有边的和,然后dfs枚举看哪条边满足上述条件,那么对应的答案减掉这条边的权值就可以啦!!


#include<bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define ios ios::sync_with_stdio(0);
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
typedef vector<int> VI;
const int maxn = 2e6 + 6;
const LL inf = 0x3f3f3f3f;
const int mod = 998244353;
LL qp(LL x,LL y){LL ans=1;x%=mod;while(y){if(y&1) ans=ans*x%mod;x=x*x%mod;y>>=1;}return ans;}

//head
struct Ed{
    int to,w,next;
}edge[maxn];
int tot,head[maxn],sz[maxn];
void add(int u,int v,int w){
    edge[++tot]={v,w,head[u]};
    head[u]=tot;
}


int t,n;
LL ans;
void dfs(int u,int fa){
    sz[u]=1;
    for(int i=head[u];i;i=edge[i].next){
        int v=edge[i].to,w=edge[i].w;
        if(v==fa) continue;
        dfs(v,u);
        sz[u]+=sz[v];
        if((n-sz[v])%2==0&&(sz[v]%2==0)) ans-=w;
    }
}

int main(){
    scanf("%d",&t);
    while(t--){
         scanf("%d",&n);
         ans=0;tot=0;
         for(int i=1;i<=n;i++) head[i]=0;
         for(int i=1,u,v,w;i<n;i++){
             scanf("%d%d%d",&u,&v,&w);
             add(u,v,w);
             add(v,u,w);
             ans+=w;
         }
         dfs(1,-1);
         printf("%lld\n",ans);
    }
}
全部评论

相关推荐

头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
嵌入式的小白:不错啊,淘天也是挺好的,恭喜
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务