Submission #18010

#TimeUsernameProblemLanguageResultExecution timeMemory
18010suhgyuho_williamDreaming (IOI13_dreaming)C++98
100 / 100
103 ms9116 KiB
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int N,M,L;
int a[100002];
int d[100002],q[100002];
int dia[100002],tmp;
int path[100002];
bool check[100002];
vector<pair<int,int> > edge[100002];

int bfs(int x){
	int i,r;
	int v,nextv,big;
	int top,rear,ansv;

	top = 0;
	rear = 1;
	q[1] = x;
	d[x] = 0;
	while(true){
		top++;
		if(top > rear) break;
		for(i=0; i<edge[q[top]].size(); i++){
			v = edge[q[top]][i].first;
			if(d[v] > d[q[top]]+edge[q[top]][i].second){
				d[v] = d[q[top]]+edge[q[top]][i].second;
				rear++;
				q[rear] = v;
			}
		}
	}
	big = -1;
	for(i=1; i<=rear; i++){
		if(big < d[q[i]]){ big = d[q[i]]; v = q[i]; }
	}
	check[v] = true;
	d[v] = 0;
	top = 0;
	rear = 1;
	q[1] = v;
	while(true){
		top++;
		if(top > rear) break;
		for(i=0; i<edge[q[top]].size(); i++){
			nextv = edge[q[top]][i].first;
			if(!check[nextv]){
				check[nextv] = true;
				d[nextv] = d[q[top]] + edge[q[top]][i].second;
				rear++;
				q[rear] = nextv;
				path[nextv] = q[top];
			}
		}
	}
    big = -1;
    for(i=1; i<=rear; i++){
		if(big < d[q[i]]){ big = d[q[i]]; nextv = q[i]; }
    }
    tmp = big;
	r = 999999999;
	x = nextv;
	while(true){
		if(r > max(d[x],d[nextv]-d[x])){ r = max(d[x],d[nextv]-d[x]); ansv = x; }
		if(v == x) break;
		x = path[x];
	}

	/*for(i=1; i<=rear; i++) d[q[i]] = 999999999;
	d[ansv] = 0;
	top = 0; rear = 1; q[1] = ansv;
	while(true){
		top++; if(top > rear) break;
		for(i=0; i<edge[q[top]].size(); i++){
			if(d[edge[q[top]][i].first] == 999999999){
			d[edge[q[top]][i].first] = d[q[top]] + edge[q[top]][i].second;
			rear++; q[rear] = edge[q[top]][i].first; }
		}
	}
	big = -1;
	for(i=1; i<=rear; i++) if(big < d[q[i]]) big = d[q[i]];
	if(r != big) printf("%d %d\n",r,big);*/

	return r;
}

#include "dreaming.h"
int travelTime(int n, int m, int l, int A[], int B[], int T[]) {
	int i;
	int x,y,cost;
	int rear;
	//freopen("input.txt","r",stdin);

	//scanf("%d %d %d",&N,&M,&L);
	N = n; M = m; L = l;
	for(i=1; i<=N; i++) d[i] = 999999999;
	for(i=1; i<=M; i++){
		//scanf("%d %d %d",&x,&y,&cost);
		x = A[i-1]; y = B[i-1]; cost = T[i-1];
		x++; y++;
		edge[x].push_back(make_pair(y,cost));
		edge[y].push_back(make_pair(x,cost));
	}
	rear = 0;
	for(i=1; i<=N; i++){
		if(check[i]) continue;
		x = bfs(i);
		rear++;
		a[rear] = x;
		dia[rear] = tmp;
		//printf("%d\n",x);
	}
	sort(a+1,a+rear+1);
	sort(dia+1,dia+rear+1);
	if(rear == 1){
		return dia[1];
		printf("%d",dia[1]);
	}else if(rear == 2){
		return max(a[1]+a[2]+L,dia[2]);
		printf("%d",max(a[1]+a[2]+L,dia[2]));
	}else{
		return max(max(a[rear]+a[rear-1]+L,a[rear-1]+a[rear-2]+L+L),dia[rear]);
		printf("%d",max(max(a[rear]+a[rear-1]+L,a[rear-1]+a[rear-2]+L+L),dia[rear]));
	}

	return 0;
}

Compilation message (stderr)

dreaming.cpp: In function 'int bfs(int)':
dreaming.cpp:28:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i=0; i<edge[q[top]].size(); i++){
            ~^~~~~~~~~~~~~~~~~~~~
dreaming.cpp:49:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i=0; i<edge[q[top]].size(); i++){
            ~^~~~~~~~~~~~~~~~~~~~
dreaming.cpp:19:15: warning: variable 'ansv' set but not used [-Wunused-but-set-variable]
  int top,rear,ansv;
               ^~~~
dreaming.cpp:68:26: warning: 'nextv' may be used uninitialized in this function [-Wmaybe-uninitialized]
   if(r > max(d[x],d[nextv]-d[x])){ r = max(d[x],d[nextv]-d[x]); ansv = x; }
                   ~~~~~~~^
dreaming.cpp:41:11: warning: 'v' may be used uninitialized in this function [-Wmaybe-uninitialized]
  check[v] = true;
  ~~~~~~~~~^~~~~~
#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...