#include "race.h"
/*
Written By mafailure
*/
//In the name of God
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
using namespace std;
using namespace __gnu_pbds;
//#define ill
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl "\n"
#ifdef ill
#define int long long
#endif
template<typename T> ostream& operator<<(ostream &os, const vector<T> &v) { os << '{'; string sep; for (const auto &x : v) os << sep << x, sep = ", "; return os << '}'; }
template<typename T, size_t size> ostream& operator<<(ostream &os, const array<T, size> &arr) { os << '{'; string sep; for (const auto &x : arr) os << sep << x, sep = ", "; return os << '}'; }
template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#ifdef AATIF_DEBUG
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif
//#define int long long
// int dx[]={-1,1,0,0}; int dy[]={0,0,1,-1};
// int dx[]={2,2,-2,-2,1,1,-1,-1}; int dy[]={1,-1,1,-1,2,-2,2,-2};
const long long mod = 1e9 + 7;
const double eps=1e-9;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef vector<bool> vb;
typedef pair<int, int> ii;
typedef vector< pair< int, int > > vii;
typedef map<int, int> mii;
typedef pair<int, ii> pip;
typedef pair<ii, int> ppi;
#define arrinp(arr,init,final,size,type) type* arr=new type[size];for(int i=init;i<final;i++)cin>>arr[i];
#define cr2d(arr,n,m,t) t**arr=new t*[n];for(int i=0;i<n;i++)arr[i]=new t[m];
#define w(t) int t;cin>>t; while(t--)
#define takeInp(n) int n;cin>>n;
#define fr(i,init,final) for(int i=init;i<final;i++)
#define frr(i,init,final) for(int i=init;i>=final;i--)
#define Fr(i,final) for(int i=0;i<final;i++)
#define Frr(i,first) for(int i=first;i>=0;i--)
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define rall(c) (c).rbegin(),(c).rend()
#define debug(x) cerr<<">value ("<<#x<<") : "<<x<<endl;
#define setb __builtin_popcount
#define lsone(n) (n&(-n))
#define rlsone(n) (n&(n-1))
#define clr(a,b) memset(a,b,sizeof(a))
const int inf= INT_MAX;
//struct point_i{int x,y;};
struct point_i{int x,y;
point_i(){ x=0; y=0;}
point_i(int x_,int y_){x=(x_);y=(y_) ;}
};
struct point
{
float x,y;
point (){x=y=0.0;}
point (float x_,float y_){x=(x_); y=(y_);}
bool operator < (point other) const{
if(fabs(x-other.x)>eps)return x<other.x;
return y<other.y;
}
bool operator == (point other) const {
return fabs(other.x-x)<=eps&& fabs(other.y-y)<=eps;
}
} ;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
vi init(string s)
{
istringstream sin(s);
int n;
vi arr;
while(sin>>n)arr.push_back(n);
return arr;
}
int power(int x, int y)
{
if(y==0)return 1;
int u=power(x,y/2);
u=(u*u)%mod;
if(y%2)u=(x*u)%mod;
return u;
}
int gcd(int a,int b)
{
if(a<b)return gcd(b,a);
return (b==0?a:(a%b?gcd(b,a%b):b));
}
int gcd_e(int a,int b,int &x,int &y)
{
if(b==0){x=1; y=0; return a;}
int x1,y1;
int p=gcd_e(b,a%b,x1,y1);
x=y1;
y=x1-(a/b)*y1;
return p;
}
int n,k;
const int maxn=200005;
int ans=inf;
int edges[maxn][2];
vii g[maxn];
int sz[maxn];
int dist[maxn];
int lev[maxn];
mii * mapp[maxn];
void findsize(int u,int p,int w)
{
sz[u]=1;
dist[u]=w;
if(~p)lev[u]=lev[p]+1;
else lev[u]=1;
for(auto v:g[u])
{
if(v.fi==p) continue;
findsize(v.fi,u,w+v.se);
sz[u]+=sz[v.fi];
}
}
void dfs(int u,int p,int keep)
{
int size=0;
int bigchild=-1;
for(auto v:g[u])
{
if(v.fi==p) continue;
if(sz[v.fi]>size)size=sz[v.fi],bigchild=v.fi;
}
for(auto v:g[u])
if(v.fi!=p&&v.fi!=bigchild)dfs(v.fi,u,0);
if(~bigchild)dfs(bigchild,u,1),mapp[u]=mapp[bigchild];
else mapp[u]=new mii();
mii & cur=*mapp[u];
if(cur.count(dist[u]))cur[dist[u]]=min(cur[dist[u]],lev[u]);
else cur[dist[u]]=lev[u];
for(auto v:g[u])
{
if(v.fi==p||v.fi==bigchild) continue;
for(auto x:*mapp[v.fi])
{
if(cur.count(k-x.fi))
ans=min(x.se+cur[k-x.fi]-2*lev[u],ans);
}
for(auto x:*mapp[v.fi])
{
if(cur.count(x.fi))cur[x.fi]=min(cur[x.fi],x.se);
else cur[x.fi]=x.se;
}
}
}
int best_path(int N, int K, int H[][2], int L[]){
n=N; k=K;
fr(i,0,n-1)
{
g[H[i][0]].pb(mp(H[i][1],L[i]));
g[H[i][1]].pb(mp(H[i][0],L[i]));
}
findsize(0,-1,0);
dfs(0,-1,0) ;
return (ans==inf?-1:ans);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
5120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
5120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
5120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
5120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |