Submission #309705

# Submission time Handle Problem Language Result Execution time Memory
309705 2020-10-04T10:55:08 Z AmineWeslati Dynamic Diameter (CEOI19_diameter) C++14
49 / 100
5000 ms 34280 KB
//Never stop trying
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define boost ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)

typedef string str;
typedef long long ll;
#define int ll
typedef double db;
typedef long double ld;
typedef pair<int, int> pi;
#define fi first
#define se second
typedef vector<int> vi;
typedef vector<pi> vpi;
typedef vector<str> vs;
typedef vector<ld> vd;
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define endl "\n"

#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)

const int MOD = 1e9 + 7; //998244353
const ll INF = 1e18;
const int MX = 1e5 + 10;
const int nx[4] = {0, 0, 1, -1}, ny[4] = {1, -1, 0, 0}; //right left down up

template<class T> using V = vector<T>;
template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }

ll cdiv(ll a, ll b) { return a / b + ((a ^ b) > 0 && a % b); } // divide a by b rounded up
constexpr int log2(int x) { return 31 - __builtin_clz(x); } // floor(log2(x))

#define dbg(x) cerr << " - " << #x << " : " << x << endl;
#define dbgs(x,y) cerr << " - " << #x << " : " << x << " / " << #y << " : " << y << endl;
#define dbgv(v) cerr << " - " << #v << " : " << endl << "[ "; for(auto it : v) cerr << it << ' '; cerr << ']' << endl;

void IO() {
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
}


int N,Q,W;

vi adj[MX];
vpi edges;
unordered_map<int,int> ed[MX];

vpi d(MX);


bool sub3(){
	FOR(i,0,N-1){
		if(edges[i].fi!=1 && edges[i].se!=-1) return false;
	}	
	return true;
}

bool sub4(){
	FOR(i,0,N-1) if(edges[i].se/2!=edges[i].fi) return false;
	return true;
}

int dist[MX];

void dfs(int u, int p){
	for(auto v: adj[u]) if(v!=p){
		dist[v]=dist[u]+ed[u][v];
		dfs(v,u);
	}
}

int solve(){
	FOR(i,1,N+1) dist[i]=-INF; 
	dist[1]=0;
	dfs(1,1);
	int d=0,u=1;
	FOR(i,2,N+1)
		if(dist[i]>d){
			d=dist[i];
			u=i;
		}

	FOR(i,1,N+1) dist[i]=-INF; 
	dist[u]=0;
	dfs(u,u);
	d=0;
	FOR(i,1,N+1)
		if(dist[i]>d) d=dist[i];
		
	return d;
}

int parent[MX];
void dfs2(int u, int p){
	d[u].fi=d[u].se=0;
	parent[u]=p;
	for(auto v: adj[u]) if(v!=p){
		dfs2(v,u);
		if(v==u*2) d[u].fi=max(d[v].fi,d[v].se)+ed[u][v];
		if(v==u*2+1) d[u].se=max(d[v].fi,d[v].se)+ed[u][v];
	}
}


int32_t main() {
	boost;

	cin>>N>>Q>>W;
	
	FOR(i,0,N-1){
		int u,v,w; cin>>u>>v>>w;
		edges.pb({u,v});
		adj[u].pb(v); adj[v].pb(u);
		ed[u][v]=w; ed[v][u]=w;
	}

	if(sub4()){
		dfs2(1,1);
		multiset<int> s;
		FOR(i,1,N+1) s.insert(d[i].fi+d[i].se);

		auto it=s.end(); it--;
		int last=0;
		while(Q--){
			int i,w; cin>>i>>w;
			i=(i+last)%(N-1);
			w=(w+last)%W;
			int u=edges[i].fi,v=edges[i].se;
			ed[u][v]=ed[v][u]=w;

			if(u>v) swap(u,v);
			while(1){
				s.erase(s.find(d[u].fi+d[u].se));
				if(v==u*2) d[u].fi=max(d[v].fi,d[v].se)+ed[u][v];
				else d[u].se=max(d[v].fi,d[v].se)+ed[u][v];
				s.insert(d[u].fi+d[u].se);
				if(u==1) break;
				v=u; u=parent[u];
			}
			auto it=s.end(); it--;
			int res=(*it);
			cout << res << endl;
			last=res;
		}
	}
	else if(sub3()){
		multiset<int> s;
		int w[N]; 
		FOR(i,0,N-1){
			w[i]=ed[edges[i].fi][edges[i].se];
			s.insert(w[i]);
		}

		int last=0;
		while(Q--){
			int i,nw; cin>>i>>nw;
			i=(i+last)%(N-1);
			nw=(nw+last)%W;
			int u=edges[i].fi,v=edges[i].se;
			s.erase(s.find(w[i]));
			w[i]=nw;
			s.insert(w[i]);
			auto it=s.end(); it--;
			int res=(*it);
			if(it!=s.begin()){
				it--; res+=(*it);
			}
			cout << res << endl;
			last=res;
		}
	}
	else{
		int last=0;
		while(Q--){
			int i,w; cin>>i>>w;
			i=(i+last)%(N-1);
			w=(w+last)%W;
			int u=edges[i].fi,v=edges[i].se;
			ed[u][v]=ed[v][u]=w;

			
			int res=solve();
			cout << res << endl;
			last=res;	
			
		}
	}




	return 0;
}

/* Careful!!!
	.Array bounds
	.Infinite loops
	.Uninitialized variables / empty containers
	.Order of input

   Some insights:
	.Binary search
	.Graph representation
	.Write brute force code
	.Change your approach
*/

Compilation message

diameter.cpp:3: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("O3")
      | 
diameter.cpp:4: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    4 | #pragma GCC optimization ("unroll-loops")
      | 
diameter.cpp: In function 'int32_t main()':
diameter.cpp:173:8: warning: unused variable 'u' [-Wunused-variable]
  173 |    int u=edges[i].fi,v=edges[i].se;
      |        ^
diameter.cpp:173:22: warning: unused variable 'v' [-Wunused-variable]
  173 |    int u=edges[i].fi,v=edges[i].se;
      |                      ^
diameter.cpp: In function 'void IO()':
diameter.cpp:50:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   50 |  freopen("input.txt", "r", stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
diameter.cpp:51:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   51 |  freopen("output.txt", "w", stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 8 ms 9728 KB Output is correct
2 Correct 7 ms 9856 KB Output is correct
3 Correct 7 ms 9728 KB Output is correct
4 Correct 7 ms 9728 KB Output is correct
5 Correct 7 ms 9728 KB Output is correct
6 Correct 7 ms 9728 KB Output is correct
7 Correct 7 ms 9728 KB Output is correct
8 Correct 7 ms 9728 KB Output is correct
9 Correct 8 ms 9728 KB Output is correct
10 Correct 7 ms 9728 KB Output is correct
11 Correct 7 ms 9728 KB Output is correct
12 Correct 7 ms 9728 KB Output is correct
13 Correct 8 ms 9728 KB Output is correct
14 Correct 8 ms 9728 KB Output is correct
15 Correct 8 ms 9728 KB Output is correct
16 Correct 8 ms 9728 KB Output is correct
17 Correct 8 ms 9728 KB Output is correct
18 Correct 8 ms 9728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 9728 KB Output is correct
2 Correct 7 ms 9856 KB Output is correct
3 Correct 7 ms 9728 KB Output is correct
4 Correct 7 ms 9728 KB Output is correct
5 Correct 7 ms 9728 KB Output is correct
6 Correct 7 ms 9728 KB Output is correct
7 Correct 7 ms 9728 KB Output is correct
8 Correct 7 ms 9728 KB Output is correct
9 Correct 8 ms 9728 KB Output is correct
10 Correct 7 ms 9728 KB Output is correct
11 Correct 7 ms 9728 KB Output is correct
12 Correct 7 ms 9728 KB Output is correct
13 Correct 8 ms 9728 KB Output is correct
14 Correct 8 ms 9728 KB Output is correct
15 Correct 8 ms 9728 KB Output is correct
16 Correct 8 ms 9728 KB Output is correct
17 Correct 8 ms 9728 KB Output is correct
18 Correct 8 ms 9728 KB Output is correct
19 Correct 293 ms 9984 KB Output is correct
20 Correct 300 ms 9976 KB Output is correct
21 Correct 308 ms 9976 KB Output is correct
22 Correct 323 ms 10104 KB Output is correct
23 Correct 2215 ms 10616 KB Output is correct
24 Correct 2284 ms 10616 KB Output is correct
25 Correct 2399 ms 10876 KB Output is correct
26 Correct 2342 ms 11000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 9728 KB Output is correct
2 Correct 7 ms 9728 KB Output is correct
3 Correct 8 ms 9856 KB Output is correct
4 Correct 15 ms 9856 KB Output is correct
5 Correct 46 ms 10104 KB Output is correct
6 Correct 7 ms 9728 KB Output is correct
7 Correct 8 ms 9856 KB Output is correct
8 Correct 8 ms 9856 KB Output is correct
9 Correct 8 ms 9856 KB Output is correct
10 Correct 17 ms 9984 KB Output is correct
11 Correct 53 ms 10360 KB Output is correct
12 Correct 12 ms 10880 KB Output is correct
13 Correct 12 ms 10880 KB Output is correct
14 Correct 13 ms 10880 KB Output is correct
15 Correct 23 ms 11000 KB Output is correct
16 Correct 65 ms 11896 KB Output is correct
17 Correct 120 ms 32268 KB Output is correct
18 Correct 128 ms 32296 KB Output is correct
19 Correct 122 ms 32268 KB Output is correct
20 Correct 142 ms 32652 KB Output is correct
21 Correct 258 ms 33936 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 9984 KB Output is correct
2 Correct 21 ms 9984 KB Output is correct
3 Correct 72 ms 10232 KB Output is correct
4 Correct 136 ms 10488 KB Output is correct
5 Correct 19 ms 11900 KB Output is correct
6 Correct 38 ms 11900 KB Output is correct
7 Correct 127 ms 12424 KB Output is correct
8 Correct 223 ms 13556 KB Output is correct
9 Correct 63 ms 21100 KB Output is correct
10 Correct 100 ms 21356 KB Output is correct
11 Correct 230 ms 21996 KB Output is correct
12 Correct 392 ms 22892 KB Output is correct
13 Correct 126 ms 32488 KB Output is correct
14 Correct 157 ms 32616 KB Output is correct
15 Correct 324 ms 33256 KB Output is correct
16 Correct 506 ms 34280 KB Output is correct
17 Correct 1125 ms 34024 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5036 ms 25704 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 8 ms 9728 KB Output is correct
2 Correct 7 ms 9856 KB Output is correct
3 Correct 7 ms 9728 KB Output is correct
4 Correct 7 ms 9728 KB Output is correct
5 Correct 7 ms 9728 KB Output is correct
6 Correct 7 ms 9728 KB Output is correct
7 Correct 7 ms 9728 KB Output is correct
8 Correct 7 ms 9728 KB Output is correct
9 Correct 8 ms 9728 KB Output is correct
10 Correct 7 ms 9728 KB Output is correct
11 Correct 7 ms 9728 KB Output is correct
12 Correct 7 ms 9728 KB Output is correct
13 Correct 8 ms 9728 KB Output is correct
14 Correct 8 ms 9728 KB Output is correct
15 Correct 8 ms 9728 KB Output is correct
16 Correct 8 ms 9728 KB Output is correct
17 Correct 8 ms 9728 KB Output is correct
18 Correct 8 ms 9728 KB Output is correct
19 Correct 293 ms 9984 KB Output is correct
20 Correct 300 ms 9976 KB Output is correct
21 Correct 308 ms 9976 KB Output is correct
22 Correct 323 ms 10104 KB Output is correct
23 Correct 2215 ms 10616 KB Output is correct
24 Correct 2284 ms 10616 KB Output is correct
25 Correct 2399 ms 10876 KB Output is correct
26 Correct 2342 ms 11000 KB Output is correct
27 Correct 7 ms 9728 KB Output is correct
28 Correct 7 ms 9728 KB Output is correct
29 Correct 8 ms 9856 KB Output is correct
30 Correct 15 ms 9856 KB Output is correct
31 Correct 46 ms 10104 KB Output is correct
32 Correct 7 ms 9728 KB Output is correct
33 Correct 8 ms 9856 KB Output is correct
34 Correct 8 ms 9856 KB Output is correct
35 Correct 8 ms 9856 KB Output is correct
36 Correct 17 ms 9984 KB Output is correct
37 Correct 53 ms 10360 KB Output is correct
38 Correct 12 ms 10880 KB Output is correct
39 Correct 12 ms 10880 KB Output is correct
40 Correct 13 ms 10880 KB Output is correct
41 Correct 23 ms 11000 KB Output is correct
42 Correct 65 ms 11896 KB Output is correct
43 Correct 120 ms 32268 KB Output is correct
44 Correct 128 ms 32296 KB Output is correct
45 Correct 122 ms 32268 KB Output is correct
46 Correct 142 ms 32652 KB Output is correct
47 Correct 258 ms 33936 KB Output is correct
48 Correct 9 ms 9984 KB Output is correct
49 Correct 21 ms 9984 KB Output is correct
50 Correct 72 ms 10232 KB Output is correct
51 Correct 136 ms 10488 KB Output is correct
52 Correct 19 ms 11900 KB Output is correct
53 Correct 38 ms 11900 KB Output is correct
54 Correct 127 ms 12424 KB Output is correct
55 Correct 223 ms 13556 KB Output is correct
56 Correct 63 ms 21100 KB Output is correct
57 Correct 100 ms 21356 KB Output is correct
58 Correct 230 ms 21996 KB Output is correct
59 Correct 392 ms 22892 KB Output is correct
60 Correct 126 ms 32488 KB Output is correct
61 Correct 157 ms 32616 KB Output is correct
62 Correct 324 ms 33256 KB Output is correct
63 Correct 506 ms 34280 KB Output is correct
64 Correct 1125 ms 34024 KB Output is correct
65 Execution timed out 5036 ms 25704 KB Time limit exceeded
66 Halted 0 ms 0 KB -