运行同一段代码直接运行exe文件和使用VS Code调试输出不同
  • 板块学术版
  • 楼主acnramips
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/11/16 12:24
  • 上次更新2023/11/4 00:25:47
查看原帖
运行同一段代码直接运行exe文件和使用VS Code调试输出不同
161688
acnramips楼主2021/11/16 12:24
#include <bits/stdc++.h>
using namespace std;
const int MAXN=50007;
//typedef pair<int,int> E;
struct Edge{
    int v,w;
};
vector<Edge> G[MAXN];
int N,M,L,cnt;
int f[MAXN];
void dfs(int u,int fa){
    multiset<int> s;
    vector<Edge>::iterator it;
    for(it=G[u].begin();it!=G[u].end();it++){
        int v=(*it).v,w=(*it).w;
        if(v==fa)continue;
        dfs(v,u);
        if(f[v]+w>=L) cnt++;
        else s.insert(f[v]+w);
    }
    while(!s.empty()){
        multiset<int>::iterator it=s.begin();
        s.erase(it);
        multiset<int>::iterator it1=s.lower_bound(L-*it);
        if(it1==s.end())
            f[u]=max(f[u],*it);
        else{
            cnt++;
            s.erase(it1);
        }
    }
}
bool check(){
    memset(f,0,sizeof(f));
    cnt=0;
    dfs(1,0);
    if(cnt>=M)return 1;
    return 0;
}
int main(){
    int l=0,r=0;
    scanf("%d%d",&N,&M);
    for(int i=1;i<N;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        G[u].push_back((Edge){v,w});
        G[v].push_back((Edge){u,w});
        r+=w;l=min(l,w);
    }
    int ans=0;
    while(l<=r){
        int mid=(l+r)>>1;
        L=mid;
        if(check()){
            ans=mid;
            l=mid+1;
        }
        else r=mid-1;
    }
    printf("%d",ans);
    return 0;
}

题目是P5021 原来跟着JSOI的夏令营视频打的 结果用vscode调试一直出不了样例 改到和讲解中代码完全一样也不行 结果直接运行exe反而可以出正解 希望可以解答一下为什么会这样

2021/11/16 12:24
加载中...