Submission #1319273

#TimeUsernameProblemLanguageResultExecution timeMemory
1319273StefanSebez전압 (JOI14_voltage)C++20
0 / 100
46 ms26460 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long const int N=1e5+50,lg=18; vector<int>E[N]; vector<pair<int,int>>edges; int n,m; int par[N][lg+1],depth[N],in[N],out[N],tajm; bool was[N]; void DFS(int u,int p=0){ in[u]=++tajm;was[u]=true; par[u][0]=p;depth[u]=depth[p]+1; for(int i=1;i<=lg;i++)par[u][i]=par[par[u][i-1]][i-1]; for(auto i:E[u]){ if(!was[i])DFS(i,u); else if(i!=p)edges.pb({i,u}); } out[u]=tajm; } int LCA(int u,int v){ if(depth[u]<depth[v])swap(u,v); for(int i=lg;i>=0;i--)if(depth[par[u][i]]>=depth[v])u=par[u][i];if(u==v)return u; for(int i=lg;i>=0;i--)if(par[u][i]!=par[v][i])u=par[u][i],v=par[v][i];return par[u][0]; } int Dist(int u,int v){return depth[u]+depth[v]-2*depth[LCA(u,v)];} int main(){ scanf("%i%i",&n,&m); for(int i=1;i<=m;i++){ int u,v;scanf("%i%i",&u,&v); E[u].pb(v);E[v].pb(u); } for(int i=1;i<=n;i++)if(!was[i])DFS(i); int num=0,U=0,V=0; for(auto [u,v]:edges){ int D=Dist(u,v); //printf("%i %i: %i\n",u,v,D); if(D%2==0){ num++; if(num==1)U=u,V=v; int c1=LCA(u,U),c2=LCA(u,V); if(depth[c1]<depth[c2])swap(c1,c2); int U1=c1,V1; c1=LCA(v,U),c2=LCA(v,V); if(depth[c1]<depth[c2])swap(c1,c2); V1=c1; if(depth[U1]<depth[LCA(u,v)]||depth[V1]<depth[LCA(u,v)])U1=V1=0; U=U1,V=V1; } } //for(int i=1;i<=n;i++)printf("%i -> %i\n",i,par[i][0]); int res=0; if(num==0){ } else if(num==1) res=Dist(U,V)+1; else res=Dist(U,V); printf("%i\n",res); return 0; }

Compilation message (stderr)

voltage.cpp: In function 'int main()':
voltage.cpp:30:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     scanf("%i%i",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~
voltage.cpp:32:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |         int u,v;scanf("%i%i",&u,&v);
      |                 ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...