Submission #118113

# Submission time Handle Problem Language Result Execution time Memory
118113 2019-06-18T08:11:10 Z baluteshih Islands (IOI08_islands) C++14
6 / 100
1441 ms 131072 KB
#include <bits/stdc++.h>
#define jizz ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pb push_back
#define ET cout << "\n"
#define MEM(i,j) memset(i,j,sizeof i)
#define F first
#define S second
#define MP make_pair
#define ALL(v) v.begin(),v.end()
#define DB(a,s,e) {for(int i=s;i<e;++i) cout << a[i] << " ";ET;}
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

struct mode
{
	ll F,S,num;
};

struct dfss
{
	ll flag,u,f,ln;
	vector<dfss>::iterator rtto;
};

vector<mode> G[1000005];
vector<pll> cir;
vector<ll> len;
bitset<1000005> yc;
ll M,dft,dfn[1000005],cur[1000005];
const ll INF=1e18;

bool dfs(ll u,ll f)
{
	vector<dfss> st;
	st.pb(dfss{0,u,f,0,vector<dfss>::iterator()});
	while(!st.empty())
	{
		auto &d=st.back();
		vector<dfss>::iterator tp=--st.end();
		if(!~cur[d.u])
			++cur[d.u],d.flag=0,dfn[d.u]=++dft;
		for(ll &i=cur[d.u];i<G[d.u].size();++i)
			if(G[d.u][i].num!=d.f)
				if(!dfn[G[d.u][i].F])
				{
					st.pb(dfss{0,G[d.u][i].F,G[d.u][i].num,G[d.u][i].S,tp});
					goto nxt;
				}
				else if(dfn[G[d.u][i].F]<=dfn[d.u])
					d.flag=1,yc[G[d.u][i].F]=1,cir.pb(MP(G[d.u][i].F,0)),len.pb(G[d.u][i].S);
		st.pop_back();
		if(d.flag)
			if(yc[d.u]) d.flag=0;
			else cir.pb(MP(d.u,0)),len.pb(d.ln),yc[d.u]=1;
		if(d.flag&&d.u!=u)
			d.rtto->flag=1;
		nxt:
			;
	}
}

ll dfs2(ll u)
{
	ll mx=0,sx=0;
	yc[u]=1;
	for(auto i:G[u])
		if(!yc[i.F])
		{
			ll d=dfs2(i.F)+i.S;
			if(d>mx) sx=mx,mx=d;
			else if(d>sx) sx=d;
		}
	M=max(M,sx+mx);
	return mx;
}

int main()
{
	ll n,a,w,ans=0,sum;
	cin >> n;
	for(int i=1;i<=n;++i)
	{
		cin >> a >> w;
		G[i].pb(mode{a,w,i});
		if(a!=i) G[a].pb(mode{i,w,i});
	}
	MEM(cur,-1);
	for(int i=1;i<=n;++i)
		if(!dfn[i])
		{
			cir.clear(),len.clear(),M=0,dfs(i,-1);
			for(ll j=0;j<cir.size();++j)
				cir[j].S=dfs2(cir[j].F);
			if(cir.size()>1)
			{
				ll n=cir.size();
				deque<pll> dq;
				sum=0,dq.pb(MP(0,cir[0].S));
				for(ll j=0;j<n;++j)	
					cir.pb(cir[j]),len.pb(len[j]);
				for(ll j=1;j<cir.size();++j)
				{
					while(dq.size()&&j-dq[0].F>=n) dq.pop_front();
					sum+=len[j-1],M=max(M,sum+cir[j].S+dq[0].S);
					while(dq.size()&&cir[j].S-sum>=dq.back().S)
						dq.pop_back();
					dq.pb(MP(j,cir[j].S-sum));
				}
			}
			ans+=M;
		}
	cout << ans << "\n";
}

Compilation message

islands.cpp: In function 'bool dfs(ll, ll)':
islands.cpp:44:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(ll &i=cur[d.u];i<G[d.u].size();++i)
                      ~^~~~~~~~~~~~~~
islands.cpp:45:6: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
    if(G[d.u][i].num!=d.f)
      ^
islands.cpp:54:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   if(d.flag)
     ^
islands.cpp:62:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
islands.cpp: In function 'int main()':
islands.cpp:94:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(ll j=0;j<cir.size();++j)
               ~^~~~~~~~~~~
islands.cpp:103:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll j=1;j<cir.size();++j)
                ~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 29 ms 31608 KB Output is correct
2 Incorrect 30 ms 31616 KB Output isn't correct
3 Incorrect 30 ms 31736 KB Output isn't correct
4 Runtime error 63 ms 63096 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Incorrect 30 ms 31608 KB Output isn't correct
6 Runtime error 64 ms 63096 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 65 ms 63244 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Incorrect 29 ms 31608 KB Output isn't correct
9 Runtime error 64 ms 63224 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Correct 30 ms 31616 KB Output is correct
11 Runtime error 64 ms 63096 KB Execution killed with signal 11 (could be triggered by violating memory limits)
# Verdict Execution time Memory Grader output
1 Correct 31 ms 31736 KB Output is correct
2 Runtime error 98 ms 63452 KB Execution killed with signal 11 (could be triggered by violating memory limits)
# Verdict Execution time Memory Grader output
1 Runtime error 67 ms 63496 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 84 ms 66248 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 117 ms 73064 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 248 ms 94612 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 414 ms 118264 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 898 ms 95056 KB Output is correct
2 Runtime error 1441 ms 131072 KB Execution killed with signal 9 (could be triggered by violating memory limits)
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 931 ms 131072 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -