Submission #1011524

#TimeUsernameProblemLanguageResultExecution timeMemory
1011524pccTelegraph (JOI16_telegraph)C++17
100 / 100
22 ms5492 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pii pair<int,int>
#define fs first
#define sc second
#define pll pair<ll,ll>

const int mxn = 1e5+10;
pii arr[mxn];
int deg[mxn];
queue<int> q;
int N;
ll dp[mxn][2];
ll sum = 0;

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N;
	for(int i = 1;i<=N;i++){
		cin>>arr[i].fs>>arr[i].sc;
		sum += arr[i].sc;
		deg[arr[i].fs]++;
	}
	for(int i = 1;i<=N;i++)if(!deg[i])q.push(i);
	while(!q.empty()){
		auto now = q.front();
		dp[now][1] = max(dp[now][1],dp[now][0]);
		q.pop();
		auto [nxt,d] = arr[now];
		deg[nxt]--;
		dp[nxt][1] = max(dp[nxt][1]+max(dp[now][0],dp[now][1]),dp[nxt][0]+max(dp[now][0],dp[now][1])+d);
		dp[nxt][0] = dp[nxt][0]+max(dp[now][0],dp[now][1]);
		if(!deg[nxt])q.push(nxt);
	}
	ll ans = 0;
	for(int ii = 1;ii<=N;ii++){
		if(!deg[ii])continue;
		int now = ii;
		vector<pii> v;
		priority_queue<ll,vector<ll>,less<ll>> pq;
		do{
			deg[now] = 0;
			auto [nxt,d] = arr[now];
			pq.push(dp[nxt][1]-dp[nxt][0]-d);
			ans += dp[nxt][0]+d;
			now = nxt;
		}while(now != ii);

		if(pq.size() == N)continue;
		ans += pq.top();pq.pop();
		while(!pq.empty()&&pq.top()>0){
			ans += pq.top();
			pq.pop();
		}
	}
	cout<<sum-ans<<'\n';
	return 0;
}

Compilation message (stderr)

telegraph.cpp: In function 'int main()':
telegraph.cpp:51:16: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int, std::vector<long long int>, std::less<long long int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   51 |   if(pq.size() == N)continue;
      |      ~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...