Submission #1102215

#TimeUsernameProblemLanguageResultExecution timeMemory
1102215_rain_Islands (IOI08_islands)C++14
27 / 100
837 ms131072 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> ii;
#define fi first 
#define se second

const int N = 1000000;
vector<ii> adj[N+2];
int en[N+2],l[N+2],id[N+2],times=0,n,root;
vector<int> s;
bool vis[N+2];
ll mxw,d[N+2];
void add_edge(int u , int v , int l){
	adj[u].push_back({v,l});
	adj[v].push_back({u,l});
	return;
}
void search(int u){
	s.push_back(u);
	id[u]=times;
	for (auto& x : adj[u]){
		int to=x.first , w=x.second;
		if (id[to]!=0) continue;
		search(to);
	}
	return;
}
void dfs(int u , int p){
	vis[u] = true;
	if (mxw <= d[u]){
		root=u;
		mxw=d[u];
	}
	for (auto& x : adj[u]){
		int to=x.first , w=x.second;
		if (vis[to]) continue;
		d[to]=d[u]+w;
		dfs(to,u);
	}
	return;
}
void Find(int root){
	mxw = 0;
	for (auto& u:s) {
		d[u]=vis[u]=0;
	}
	dfs(root,root);
}



int32_t main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; ++i){
		cin >> en[i] >> l[i];
		add_edge(i,en[i],l[i]);
	}
	for (int i = 1; i <= n; ++i) {
		sort(adj[i].begin(),adj[i].end(),
		[=](ii x , ii y){
				if (x.se!=y.se) return x.se>y.se;
		});
	}
	ll ans=0;
	for (int i = 1; i <= n; ++i){
		if (!id[i]){
			++times,s.clear();
			search(i);
			root = i;
			Find(root);
			Find(root);
			ans+=mxw;
		}
	}
	cout << ans;
}

Compilation message (stderr)

islands.cpp: In function 'void search(int)':
islands.cpp:24:20: warning: unused variable 'w' [-Wunused-variable]
   24 |   int to=x.first , w=x.second;
      |                    ^
islands.cpp: In lambda function:
islands.cpp:66:3: warning: control reaches end of non-void function [-Wreturn-type]
   66 |   });
      |   ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...