Submission #1008411

#TimeUsernameProblemLanguageResultExecution timeMemory
1008411vjudge1Islands (IOI08_islands)C++17
3 / 100
598 ms131072 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define pb push_back #define ll long long #define int long long const long long inf=1e18; const int MOD=1e9+7; const int N=1e6+1; vector<pair<int,int>> adj[N]; int low[N],sum=0,mn=inf,ans=0; map<pair<int,int>,int> mp; void dfs(int node,int depth,int par){ low[node]=depth; for(auto i:adj[node]){ if(i.first==par)continue; if(low[i.first]==0){ dfs(i.first,depth+1,node); sum+=mp[{min(i.first,node),max(i.first,node)}]; if(low[i.first]<low[node])mn=min(mn,mp[{min(i.first,node),max(i.first,node)}]); low[node]=min(low[node],low[i.first]); } else{ low[node]=min(low[node],low[i.first]); } } } signed main() { int n; cin>>n; for(int i=1;i<=n;i++){ int x,l; cin>>x>>l; mp[{min(i,x),max(i,x)}]=l; } for(auto i:mp){ adj[i.first.first].pb({i.first.second,i.second}); adj[i.first.second].pb({i.first.first,i.second}); } for(int i=1;i<=n;i++){ if(low[i]==0){ dfs(i,1,0); if(mn==inf)mn=0; ans+=sum-mn; sum=0; mn=inf; } } cout<<ans; }
#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...