Submission #490543


Source Code Expand

#include <bits/stdc++.h>

#define MAX_N (100000)
#define MAX_M (100000)


using namespace std;

vector<int> G[MAX_N];
vector<pair<int, int> > bridge;
int ord[MAX_N], low[MAX_N];
int w[MAX_N];
bool vis[MAX_N];

void dfs(int v, int p, int &k)
{
	vis[v] = true;

	ord[v] = k++;
	low[v] = ord[v];

	for (int i = 0; i < G[v].size(); i++){
		if (!vis[G[v][i]]){
			dfs(G[v][i], v, k);
			low[v] = min(low[v], low[G[v][i]]);
			if (ord[v] < low[G[v][i]]) bridge.push_back(make_pair(v, G[v][i]));
		}
		else if (G[v][i] != p){
			low[v] = min(low[v], ord[G[v][i]]);
		}
	}
}

int par[MAX_N];

int find(int x)
{
	return (par[x] >= 0 ? par[x] = find(par[x]) : x);
}

void merge(int x, int y)
{
	x = find(x);
	y = find(y);
	if (x == y) return;
	if (-par[x] < -par[y]) swap(x, y);
	par[x] += par[y];
	par[y] = x;
}

int nw[MAX_N];
int nSize[MAX_N];
vector<int> nG[MAX_N];
//int dp[MAX_N];
int dp1[MAX_N];
int dp2[MAX_N];	// return

/*
int getMax(int v, int p)
{
	if (dp[v] >= 0) return (dp[v]);

	int res = 0;
	for (int i = 0; i < nG[v].size(); i++){
		if (nG[v][i] != p) res = max(res, getMax(nG[v][i], v));
	}

	return (dp[v] = res + nw[v]);
}
*/

void getMax2(int v, int p){
	if(dp1[v] >= 0){ return; }
	
	if(p == -1 && nG[v].empty()){
		dp1[v] = dp2[v] = nw[v];
		return;
	}
	if(p != -1 && nG[v].size() <= 1){
		if(nSize[v] == 1){
			dp1[v] = nw[v];
			dp2[v] = 0;
		}
		else{
			dp1[v] = dp2[v] = nw[v];
		}
		return;
	}

	int sum2 = 0;
	for(int i = 0; i < nG[v].size(); ++i){
		int t = nG[v][i];
		if(t == p){ continue; }
		getMax2(t, v);
		sum2 += dp2[t];
	}

	int res1 = 0;
	for(int i = 0; i < nG[v].size(); ++i){
		int t = nG[v][i];
		if(t == p){ continue; }
		res1 = max(res1, sum2 - dp2[t] + dp1[t]);
	}
	res1 += nw[v];

	int res2 = sum2;
	if(res2 != 0 || nSize[v] > 1){
		res2 += nw[v];
	}

	dp1[v] = res1;
	dp2[v] = res2;
}


int main()
{
	int N, M;

	scanf("%d %d", &N, &M);

	for (int i = 0; i < N; i++) scanf("%d", w + i);

	for (int i = 0; i < M; i++){
		int x, y;
		scanf("%d %d", &x, &y);
		G[--x].push_back(--y);
		G[y].push_back(x);
	}

	int k = 0;

	dfs(0, -1, k);

	for (int i = 0; i < bridge.size(); i++){
		{
			auto &v = G[bridge[i].first];
			v.erase(find(v.begin(), v.end(), bridge[i].second));
		}
		{
			auto &v = G[bridge[i].second];
			v.erase(find(v.begin(), v.end(), bridge[i].first));
		}
	}

	memset(par, -1, sizeof(par));

	for (int i = 0; i < N; i++){
		for (int j = 0; j < G[i].size(); j++){
			merge(i, G[i][j]);
		}
	}

	for (int i = 0; i < N; i++){
		nw[find(i)] += w[i];
	}

	for (int i = 0; i < N; i++){
		nSize[find(i)] = -par[find(i)];
	}

	for (int i = 0; i < bridge.size(); i++){
		bridge[i].first = find(bridge[i].first);
		bridge[i].second = find(bridge[i].second);
		nG[bridge[i].first].push_back(bridge[i].second);
		nG[bridge[i].second].push_back(bridge[i].first);
	}

//	memset(dp, -1, sizeof(dp));
	memset(dp1, -1, sizeof dp1);
	memset(dp2, -1, sizeof dp2);

	int aaa = find(0);
	getMax2(aaa, -1);
	int ans = max(dp1[aaa], dp2[aaa]);
	printf("%d\n", ans);

//	printf("%d\n", getMax(find(0), -1));

	return (0);
}

Submission Info

Submission Time
Task G - Escape
User stagamimpet
Language C++11 (GCC 4.8.1)
Score 100
Code Size 3235 Byte
Status AC
Exec Time 1366 ms
Memory 25188 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:120:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &N, &M);
                        ^
./Main.cpp:122:48: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  for (int i = 0; i < N; i++) scanf("%d", w + i);
                                                ^
./Main.cpp:126:25: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &x, &y);
                         ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 42
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, 50_clique_01.txt, 50_clique_02.txt, 60_circle_01.txt, 60_circle_02.txt, 70_line_01.txt, 70_line_02.txt, 75_line2_01.txt, 75_line2_02.txt, 80_star_01.txt, 80_star_02.txt, 90_random_tree_01.txt, 90_random_tree_02.txt, 90_random_tree_03.txt, 90_random_tree_04.txt, 90_random_tree_05.txt, 90_random_tree_06.txt, 90_random_tree_07.txt, 90_random_tree_08.txt, 90_random_tree_09.txt, 90_random_tree_10.txt, 95_random_max_01.txt, 95_random_max_02.txt, 95_random_max_03.txt, 95_random_max_04.txt, 95_random_max_05.txt, 95_random_max_06.txt, 95_random_max_07.txt, 95_random_max_08.txt, 95_random_max_09.txt, 95_random_max_10.txt, 99_random_01.txt, 99_random_02.txt, 99_random_03.txt, 99_random_04.txt, 99_random_05.txt, 99_random_06.txt, 99_random_07.txt, 99_random_08.txt, 99_random_09.txt, 99_random_10.txt
Case Name Status Exec Time Memory
50_clique_01.txt AC 72 ms 7656 KiB
50_clique_02.txt AC 72 ms 7660 KiB
60_circle_01.txt AC 133 ms 20464 KiB
60_circle_02.txt AC 134 ms 20460 KiB
70_line_01.txt AC 162 ms 25184 KiB
70_line_02.txt AC 162 ms 25188 KiB
75_line2_01.txt AC 155 ms 20444 KiB
75_line2_02.txt AC 156 ms 20456 KiB
80_star_01.txt AC 1366 ms 16476 KiB
80_star_02.txt AC 1359 ms 16472 KiB
90_random_tree_01.txt AC 167 ms 15972 KiB
90_random_tree_02.txt AC 159 ms 15964 KiB
90_random_tree_03.txt AC 161 ms 15960 KiB
90_random_tree_04.txt AC 158 ms 15968 KiB
90_random_tree_05.txt AC 159 ms 15968 KiB
90_random_tree_06.txt AC 161 ms 15964 KiB
90_random_tree_07.txt AC 162 ms 16028 KiB
90_random_tree_08.txt AC 161 ms 15964 KiB
90_random_tree_09.txt AC 161 ms 15964 KiB
90_random_tree_10.txt AC 162 ms 15964 KiB
95_random_max_01.txt AC 160 ms 15960 KiB
95_random_max_02.txt AC 164 ms 15968 KiB
95_random_max_03.txt AC 165 ms 15964 KiB
95_random_max_04.txt AC 164 ms 15976 KiB
95_random_max_05.txt AC 164 ms 15976 KiB
95_random_max_06.txt AC 169 ms 15968 KiB
95_random_max_07.txt AC 168 ms 15968 KiB
95_random_max_08.txt AC 178 ms 15948 KiB
95_random_max_09.txt AC 168 ms 15956 KiB
95_random_max_10.txt AC 168 ms 15960 KiB
99_random_01.txt AC 128 ms 12648 KiB
99_random_02.txt AC 81 ms 8680 KiB
99_random_03.txt AC 73 ms 9192 KiB
99_random_04.txt AC 74 ms 8424 KiB
99_random_05.txt AC 100 ms 10348 KiB
99_random_06.txt AC 133 ms 13920 KiB
99_random_07.txt AC 154 ms 15208 KiB
99_random_08.txt AC 61 ms 8048 KiB
99_random_09.txt AC 153 ms 15196 KiB
99_random_10.txt AC 78 ms 9704 KiB
sample_01.txt AC 37 ms 6636 KiB
sample_02.txt AC 36 ms 6632 KiB