玄学re求救

回复帖子

@futongxue 2019-05-15 23:18 回复

#include<bits/stdc++.h>
using namespace std;
int n,s;
struct node{
    int y,edge;
};
bool v[310];
vector<node> Q[310];

int ans,d[310],root,cnt1[310],cnt2[310],jilux[310],_x,next[310];

void dp(int x){
    v[x]=true;
    for(int i=0;i<Q[x].size();i++){
        node e=Q[x][i];
        if(v[e.y]) continue;
        dp(e.y);
        if(d[e.y]+d[x]+e.edge>ans){
            ans=d[e.y]+d[x]+e.edge;
            root=x;
        }
        d[x]=max(d[x],d[e.y]+e.edge);
    }
}

void init(){
    cin>>n>>s;
    for(int i=1;i<=n-1;i++){
        int x,y,z;
        cin>>x>>y>>z;
        node e1,e2;
        e1.y=x;e1.edge=z;
        e2.y=y;e2.edge=z;
        Q[x].push_back(e2);
        Q[y].push_back(e1);
    }
}

void clear(){
    memset(d,0,sizeof(d));
    memset(v,false,sizeof(v));
}

void fd(int x,int a[]){
    v[x]=true;
    node e;int now=-2,y;
    if(d[x]==0) return ;
    for(int i=0;i<Q[x].size();i++){
        e=Q[x][i];
        if(v[e.y]) continue;
        if(d[e.y]+e.edge>now){
            cout<<x<<"--"<<e.y<<"  "<<e.edge<<"+"<<d[e.y]<<endl;
            y=e.y;
            now=d[e.y]+e.edge;
        }
    }
    a[++_x]=y;
    cout<<y<<endl;
    fd(y,cnt1);
}

bool check(int mid){
    for(int i=1;i<=n;i++){
        int j;
    }
}

void solve(){
    ans=0;
    int mid,l,r;
    l=0;r=1000*300;
    while(l<=r){
        int mid=(l+r)/2;
        check(mid);
    }
}

int main(){
    init();
    dp(1);
    clear();
    ans=0;
    dp(root);
    memset(v,false,sizeof(v));
    fd(root,cnt1);
    if(v[2]) cout<<1;
    fd(root,cnt2);
    //solve();
}
为什么去掉倒数第三行的if就不re,但是这个v数组好像根本没有记录,

数据:
5 2
1 2 5
2 3 2
2 4 4
2 5 3