Submission #403442

#TimeUsernameProblemLanguageResultExecution timeMemory
403442WasrekSwapping Cities (APIO20_swap)C++14
7 / 100
139 ms11996 KiB
#include<bits/stdc++.h> #include "swap.h" // #include"grader.cpp" #include <vector> #define SIZE 100010 #define MAX 2000000000 using namespace std; struct A{ int u,w; }; int n; A m1={MAX,MAX},m2={MAX,MAX},m3={MAX,MAX}; vector<A> g[SIZE]; void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n=N; for(int i=0;i<M;i++){ g[U[i]].push_back({V[i],W[i]}); g[V[i]].push_back({U[i],W[i]}); if(W[i]<m1.w){ m3=m2,m2=m1,m1={V[i],W[i]}; }else if(W[i]<m2.w){ m3=m2,m2={V[i],W[i]}; }else if(W[i]<m3.w){ m3={V[i],W[i]}; } } // printf("%d %d\n%d %d\n%d %d\n",m1.u,m1.w,m2.u,m2.w,m3.u,m3.w); return ; } int getMinimumFuelCapacity(int X, int Y) { //min path ที่มี node อยู่ระหว่าง path //หา min ถนนที่เชื่อมกับโหนดตรงกลาง //เทียบ min กับ path อื่นๆ ไปได้ (เชื่อมตรงเลยก็ได้) if(n<=3) return -1; if(X!=0 && Y!=0){ if(X!=m1.u && Y!=m1.u){ return max(g[X][0].w,max(g[Y][0].w,m1.w)); }else if(X!=m2.u && Y!=m2.u){ return max(g[X][0].w,max(g[Y][0].w,m2.w)); }else if(X!=m3.u && Y!=m3.u){ return max(g[X][0].w,max(g[Y][0].w,m3.w)); } }else{ if(Y==0) swap(X,Y); //X==0 if(Y==m1.u || Y==m2.u || Y==m3.u){ return m3.w; }else{ return max(g[Y][0].w,m2.w); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...