Submission #309201

#TimeUsernameProblemLanguageResultExecution timeMemory
309201mafailureRace (IOI11_race)C++17
0 / 100
4 ms5120 KiB
#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); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...