Submission #4578445


Source Code Expand

#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <list>
#include <set>
#include <numeric>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <climits>
#include <cfloat>
#include <ctime>
#include <complex>
#include <cassert>
#include <array>
#include <bitset> 
#include <unordered_map>
#include <random>

using namespace std;
typedef long long LL;
typedef pair<int,int> P;

const int L=1e5+1;
vector<int> es[L];
char col[L+10];
map<int,int> mf[L],mg[L],mh[L];
int hitf[L];
int pref[L];
int f(int r,int p)
{
	if(mf[r].count(p))
	{
		return mf[r][p];
	}
	if(r==0)
	{
		return mf[r][p]=0;
	}
	if(col[r]=='W')
	{
		return mf[r][p]=1;
	}
	
	if(hitf[r]==0)
	{
		pref[r]=p;
		for(auto i:es[r])
		{
			if(i!=p&&f(i,r))
			{
				hitf[r]=i;
				return mf[r][p]=1;
			}
		}
		hitf[r]=-1;
	}
	else if(hitf[r]==p)
	{
		for(auto i:es[r])
		{
			if(i!=p&&f(i,r))
			{
				return mf[r][p]=1;
			}
		}
	}
	else if(hitf[r]>0)
	{
		return mf[r][p]=1;
	}
	else
	{
		return mf[r][p]=f(pref[r],r);
	}
	return mf[r][p]=0;
}

int sumg[L];
int preg[L];
int cntg[L];
int g(int r, int p)
{
	if(mg[r].count(p))
	{
		return mg[r][p];
	}
	if(f(r,p)==0)
	{
		return mg[r][p]=0;
	}
	int sum=0;
	int cnt=0;
	if(sumg[r]==-1)
	{
		preg[r]=p;
		for(auto i:es[r])
		{
			if(i!=p)
			{
				if(f(i,r))
				{
					sum+=g(i,r)+2;
					cnt++;
				}
			}
		}
		sumg[r]=sum;
		cntg[r]=cnt;
	}
	else
	{
		sum=sumg[r];
		cnt=cntg[r];
		if(f(p,r))
		{
			sum-=g(p,r)+2;
			cnt--;
		}
		if(f(preg[r],r))
		{
			sum+=g(preg[r],r)+2;
			cnt++;
		}
	}
	if(p==0)
	{
		cnt++;
	}
	if(col[r]=='B')
	{
		cnt++;
	}
	if(cnt%2)
	{
		sum++;
	}
	//cerr << "g " << r << ", " << p << ": " << sum << endl;
	return mg[r][p]=sum;
}

int sumh[L];
int preh[L];
int mxh[L];
int mx2h[L];
int cnth[L];
int h(int r,int p)
{
	if(mh[r].count(p))
	{
		return mh[r][p];
	}
	if(f(r,p)==0)
	{
		//cerr << "aaa " << r << ", " << p << endl;
		return mh[r][p]=0;
	}
	int sum=0;
	int mx=0;
	int cnt=0;
	if(sumh[r]==-1){
		preh[r]=p;
		int mx2=0;
		for(auto i:es[r])
		{
			if(i!=p){
				if(f(i,r))
				{
					sum+=g(i,r)+2;
					int d=g(i,r)+2-(h(i,r)+1);

					if(mx<d)
					{
						mx2=mx;
						mx=d;
					}
					else if(mx2<d)
					{
						mx2=d;
					}
					cnt++;
				}
			}
		}
		sumh[r]=sum;
		cnth[r]=cnt;
		mxh[r]=mx;
		mx2h[r]=mx2;
	}
	else
	{
		sum=sumh[r];
		cnt=cnth[r];
		mx=mxh[r];
		if(f(p,r))
		{
			sum-=g(p,r)+2;
			int d=g(p,r)+2-(h(p,r)+1);
			if(mx==d)
			{
				mx=mx2h[r];
			}
			cnt--;
		}
		if(f(preh[r],r))
		{
			sum+=g(preh[r],r)+2;
			int d=g(preh[r],r)+2-(h(preh[r],r)+1);
			if(mx<d)
			{
				mx=d;
			}
			cnt++;
		}
	}
	if(cnt==0)
	{
		if(p==0)
		{
			sum=1;
		}
		return mh[r][p]=sum;
	}
	if(p==0)
	{
		cnt++;
	}
	if(col[r]=='W')
	{
		cnt++;
	}
	if(cnt%2)
	{
		sum++;
	}
	sum-=mx;
	int v=min(sum,g(r,p));
	//cerr << "h " << r << ", " << p << ": " << v << endl;
	return mh[r][p]=v;


}


int main() {
	//memset(hitf,-1,sizeof(hitf));
	memset(sumg,-1,sizeof(sumg));
	memset(sumh,-1,sizeof(sumh));
	int N;
	cin >> N;
	for(int i=1;i<N;i++){
		int x,y;
		cin >> x >> y;
		es[x].push_back(y);
		es[y].push_back(x);
	}
	col[0]='B';
	cin >> (col+1);
	bool any=false;
	for(int i=1;i<=N;i++)
	{
		if(col[i]=='W'){
			any=true;
			break;
		}
	}
	if(!any)
	{
		cout << 0 << endl;
		return 0;
	}
	int ret=1<<20;
	for(int i=1;i<=N;i++)
	{
		ret=min(ret,h(i,0));
	}
	cout << ret << endl;

	return 0;
}


Submission Info

Submission Time
Task F - Monochrome Cat
User kenimo
Language C++14 (Clang 3.8.0)
Score 800
Code Size 3785 Byte
Status AC
Exec Time 733 ms
Memory 71936 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 4
AC × 118
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt, 1_036.txt, 1_037.txt, 1_038.txt, 1_039.txt, 1_040.txt, 1_041.txt, 1_042.txt, 1_043.txt, 1_044.txt, 1_045.txt, 1_046.txt, 1_047.txt, 1_048.txt, 1_049.txt, 1_050.txt, 1_051.txt, 1_052.txt, 1_053.txt, 1_054.txt, 1_055.txt, 1_056.txt, 1_057.txt, 1_058.txt, 1_059.txt, 1_060.txt, 1_061.txt, 1_062.txt, 1_063.txt, 1_064.txt, 1_065.txt, 1_066.txt, 1_067.txt, 1_068.txt, 1_069.txt, 1_070.txt, 1_071.txt, 1_072.txt, 1_073.txt, 1_074.txt, 1_075.txt, 1_076.txt, 1_077.txt, 1_078.txt, 1_079.txt, 1_080.txt, 1_081.txt, 1_082.txt, 1_083.txt, 1_084.txt, 1_085.txt, 1_086.txt, 1_087.txt, 1_088.txt, 1_089.txt, 1_090.txt, 1_091.txt, 1_092.txt, 1_093.txt, 1_094.txt, 1_095.txt, 1_096.txt, 1_097.txt, 1_098.txt, 1_099.txt, 1_100.txt, 1_101.txt, 1_102.txt, 1_103.txt, 1_104.txt, 1_105.txt, 1_106.txt, 1_107.txt, 1_108.txt, 1_109.txt, 1_110.txt, 1_111.txt, 1_112.txt, 1_113.txt, 1_114.txt, 1_115.txt, 1_116.txt
Case Name Status Exec Time Memory
0_000.txt AC 6 ms 12544 KB
0_001.txt AC 6 ms 12544 KB
0_002.txt AC 6 ms 12544 KB
0_003.txt AC 6 ms 12544 KB
1_003.txt AC 6 ms 12544 KB
1_004.txt AC 6 ms 12544 KB
1_005.txt AC 6 ms 12544 KB
1_006.txt AC 6 ms 12544 KB
1_007.txt AC 6 ms 12544 KB
1_008.txt AC 6 ms 12544 KB
1_009.txt AC 6 ms 12544 KB
1_010.txt AC 6 ms 12544 KB
1_011.txt AC 6 ms 12544 KB
1_012.txt AC 6 ms 12544 KB
1_013.txt AC 6 ms 12544 KB
1_014.txt AC 6 ms 12544 KB
1_015.txt AC 6 ms 12544 KB
1_016.txt AC 6 ms 12544 KB
1_017.txt AC 6 ms 12544 KB
1_018.txt AC 6 ms 12544 KB
1_019.txt AC 6 ms 12544 KB
1_020.txt AC 6 ms 12544 KB
1_021.txt AC 6 ms 12544 KB
1_022.txt AC 6 ms 12544 KB
1_023.txt AC 6 ms 12544 KB
1_024.txt AC 6 ms 12544 KB
1_025.txt AC 6 ms 12544 KB
1_026.txt AC 6 ms 12544 KB
1_027.txt AC 6 ms 12544 KB
1_028.txt AC 6 ms 12544 KB
1_029.txt AC 6 ms 12544 KB
1_030.txt AC 6 ms 12544 KB
1_031.txt AC 6 ms 12544 KB
1_032.txt AC 6 ms 12544 KB
1_033.txt AC 6 ms 12544 KB
1_034.txt AC 6 ms 12544 KB
1_035.txt AC 6 ms 12544 KB
1_036.txt AC 6 ms 12544 KB
1_037.txt AC 6 ms 12544 KB
1_038.txt AC 6 ms 12544 KB
1_039.txt AC 6 ms 12544 KB
1_040.txt AC 6 ms 12544 KB
1_041.txt AC 6 ms 12544 KB
1_042.txt AC 6 ms 12544 KB
1_043.txt AC 6 ms 12544 KB
1_044.txt AC 6 ms 12544 KB
1_045.txt AC 154 ms 33280 KB
1_046.txt AC 212 ms 38528 KB
1_047.txt AC 180 ms 15616 KB
1_048.txt AC 315 ms 49024 KB
1_049.txt AC 345 ms 53120 KB
1_050.txt AC 284 ms 49280 KB
1_051.txt AC 467 ms 51576 KB
1_052.txt AC 71 ms 20736 KB
1_053.txt AC 151 ms 15480 KB
1_054.txt AC 153 ms 25340 KB
1_055.txt AC 434 ms 50936 KB
1_056.txt AC 210 ms 29692 KB
1_057.txt AC 10 ms 13312 KB
1_058.txt AC 189 ms 35968 KB
1_059.txt AC 69 ms 13568 KB
1_060.txt AC 292 ms 44288 KB
1_061.txt AC 421 ms 57088 KB
1_062.txt AC 182 ms 34944 KB
1_063.txt AC 315 ms 43392 KB
1_064.txt AC 202 ms 32256 KB
1_065.txt AC 15 ms 12672 KB
1_066.txt AC 352 ms 44028 KB
1_067.txt AC 88 ms 21760 KB
1_068.txt AC 231 ms 34304 KB
1_069.txt AC 99 ms 25600 KB
1_070.txt AC 199 ms 34816 KB
1_071.txt AC 158 ms 15232 KB
1_072.txt AC 190 ms 33024 KB
1_073.txt AC 35 ms 17152 KB
1_074.txt AC 23 ms 15104 KB
1_075.txt AC 183 ms 34304 KB
1_076.txt AC 476 ms 59008 KB
1_077.txt AC 149 ms 15104 KB
1_078.txt AC 99 ms 24192 KB
1_079.txt AC 193 ms 34048 KB
1_080.txt AC 184 ms 34048 KB
1_081.txt AC 543 ms 68736 KB
1_082.txt AC 570 ms 69120 KB
1_083.txt AC 186 ms 15616 KB
1_084.txt AC 454 ms 59648 KB
1_085.txt AC 559 ms 71552 KB
1_086.txt AC 543 ms 71936 KB
1_087.txt AC 733 ms 63992 KB
1_088.txt AC 467 ms 56952 KB
1_089.txt AC 178 ms 15992 KB
1_090.txt AC 537 ms 49912 KB
1_091.txt AC 681 ms 63992 KB
1_092.txt AC 179 ms 15992 KB
1_093.txt AC 505 ms 66432 KB
1_094.txt AC 532 ms 65536 KB
1_095.txt AC 192 ms 15616 KB
1_096.txt AC 415 ms 56576 KB
1_097.txt AC 529 ms 67200 KB
1_098.txt AC 482 ms 62848 KB
1_099.txt AC 558 ms 63868 KB
1_100.txt AC 537 ms 58876 KB
1_101.txt AC 188 ms 15868 KB
1_102.txt AC 452 ms 51580 KB
1_103.txt AC 578 ms 63868 KB
1_104.txt AC 491 ms 54908 KB
1_105.txt AC 517 ms 63744 KB
1_106.txt AC 480 ms 60416 KB
1_107.txt AC 189 ms 15744 KB
1_108.txt AC 413 ms 52480 KB
1_109.txt AC 520 ms 63744 KB
1_110.txt AC 475 ms 57600 KB
1_111.txt AC 512 ms 63744 KB
1_112.txt AC 486 ms 60416 KB
1_113.txt AC 183 ms 15744 KB
1_114.txt AC 378 ms 52480 KB
1_115.txt AC 480 ms 63744 KB
1_116.txt AC 442 ms 57600 KB