Submission #139243

#TimeUsernameProblemLanguageResultExecution timeMemory
139243MrBrionixDreaming (IOI13_dreaming)C++14
100 / 100
206 ms22644 KiB
#include <stdio.h> #include <stdlib.h> #include "dreaming.h" #include<bits/stdc++.h> using namespace std; vector<int> grafo[100005],peso[100005],v,dist; int part,best,tmp,ans,sum; bool vis[100005]; void dfs1(int nodo,int val,int last){ //cout<<nodo<<" "<<val<<endl; if(val>best){ best=val; part=nodo; } for(int i=0;i<grafo[nodo].size();i++){ if(grafo[nodo][i]!=last){ dfs1(grafo[nodo][i],val+peso[nodo][i],nodo); } } } bool dfs2(int nodo,int last){ if(nodo==part)return true; for(int i=0;i<grafo[nodo].size();i++){ if(grafo[nodo][i]!=last){ if(dfs2(grafo[nodo][i],nodo)==true){ v.push_back(peso[nodo][i]); return true; } } } return false; } void dfs(int nodo){ vis[nodo]=true; for(int i=0;i<grafo[nodo].size();i++){ if(vis[grafo[nodo][i]]==false) dfs(grafo[nodo][i]); } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0;i<M;i++){ grafo[A[i]].push_back(B[i]); grafo[B[i]].push_back(A[i]); peso[A[i]].push_back(T[i]); peso[B[i]].push_back(T[i]); } for(int i=0;i<N;i++){ if(vis[i]==false){ best=0; part=i; dfs1(i,0,-1); best=0; tmp=part; dfs1(part,0,-1); v.clear(); dfs2(tmp,-1); dfs(i); ans=max(ans,best); sum=0; int tmp2=best; for(int j=0;j<v.size();j++){ sum+=v[j]; tmp2=min(tmp2,max(sum,best-sum)); } dist.push_back(tmp2); //cout<<best<<" edasd "<<tmp2<<endl; } } sort(dist.begin(),dist.end()); if(dist.size()>=2) ans=max(ans,dist[dist.size()-1]+dist[dist.size()-2]+L); if(dist.size()>=3) ans=max(ans,dist[dist.size()-3]+dist[dist.size()-2]+2*L); return ans; } /* #define fail(s, x...) do { \ fprintf(stderr, s "\n", ## x); \ exit(1); \ } while(0) #define MAX_N 100000 static int A[MAX_N]; static int B[MAX_N]; static int T[MAX_N]; int main() { int N, M, L, i; int res; FILE *f = fopen("input.txt", "r"); if (!f) fail("Failed to open input file."); res = fscanf(f, "%d%d%d", &N, &M, &L); for (i = 0; i < M; i++) res = fscanf(f, "%d%d%d", &A[i], &B[i], &T[i]); fclose(f); int answer = travelTime(N, M, L, A, B, T); printf("%d\n", answer); return 0; }*/

Compilation message (stderr)

dreaming.cpp: In function 'void dfs1(int, int, int)':
dreaming.cpp:21:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<grafo[nodo].size();i++){
                 ~^~~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'bool dfs2(int, int)':
dreaming.cpp:33:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<grafo[nodo].size();i++){
                 ~^~~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs(int)':
dreaming.cpp:49:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<grafo[nodo].size();i++){
                 ~^~~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:82:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j=0;j<v.size();j++){
                         ~^~~~~~~~~
#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...