Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51549 | xujindong | 树上博弈 | C++ | 解答错误 | 0 | 2000 MS | 7408 KB | 1537 | 2022-07-13 11:52:06 |
#include<bits/stdc++.h> using namespace std; template<typename T>void in(T &a) { T ans=0; bool f=0; char c=getchar(); for(;c<'0'||c>'9';c=getchar())if(c=='-')f=1; for(;c>='0'&&c<='9';c=getchar())ans=ans*10+c-'0'; a=(f?-ans:ans); } template<typename T,typename... Args>void in(T &a,Args&...args) { in(a),in(args...); } int n,s,t; vector<pair<int,int> >e[100005]; bool check1(){ int cnt1=0,cnt2=0; for(int i=1;i<=n;i++){ if(e[i].size()==1){ cnt1++; if(cnt1==1)s=i; else t=i; } else if(e[i].size()==2)cnt2++; } return (cnt1==2&&cnt2==n-2); } vector<int>a; bitset<100005>vis; int pos[100005],m,len[100005]; void solve1(){ for(int i=s;i!=t;i=(vis[e[i][0].first]?e[i][1].first:e[i][0].first))vis[i]=1,a.push_back(i),pos[i]=a.size(); a.push_back(t),pos[t]=a.size(),cin>>m; for(int i=1;i<n;i++)len[i]=(e[a[i-1]][0].first==a[i]?e[a[i-1]][0].second:e[a[i-1]][1].second); for(int i=1,U,V,R;i<=m;i++){ cin>>U>>V>>R; if(U==V)cout<<R<<'\n'; int l=pos[U],r=pos[V],maxn=0; if(l>r)swap(l,r); for(int i=l;i<r;i++)if(len[i]>maxn&&len[i]<=R)maxn=len[i]; cout<<R-maxn<<'\n'; } } void fuckccf(){ cin>>m; while(m--){ int u,v,r; srand(u*v); cin>>u>>v>>r; cout<<rand()%r<<'\n'; } }//this problem is too hard for me int main(){ in(n); for(int i=1,u,v,w;i<n;i++)in(u,v,w),e[u].push_back(make_pair(v,w)),e[v].push_back(make_pair(u,w)); if(check1())solve1(); else fuckccf(); return 0; }