제출 #1140861

#제출 시각아이디문제언어결과실행 시간메모리
1140861SmuggingSpunPower Plant (JOI20_power)C++20
6 / 100
313 ms436 KiB
#include<bits/stdc++.h>
#define taskname "C"
using namespace std;
const int lim = 2e5 + 5;
template<class T>void maximize(T& a, T b){
	if(a < b){
		a = b;
	}
}
int n;
namespace sub1{
	void solve(){
		vector<vector<int>>g(n);
		for(int i = 1; i < n; i++){
			int u, v;
			cin >> u >> v;
			g[--u].emplace_back(--v);
			g[v].emplace_back(u);
		}
		string s;
		cin >> s;
		vector<int>h(n), parent(n);
		auto dfs = [&] (auto&& self, int s) -> void{
			for(int& d : g[s]){
				if(d != parent[s]){
					h[d] = h[parent[d] = s] + 1;
					self(self, d); 
				}
			}
		};
		dfs(dfs, h[0] = parent[0] = 0);
		int ans = 0;
		for(int mask = (1 << n) - 1; mask > 0; mask--){
			vector<int>vertex;
			bool flag = true;
			for(int i = 0; i < n; i++){
				if(1 << i & mask){
					if(s[i] == '0'){
						flag = false;
						break;
					}
					vertex.emplace_back(i);
				}
			}
			if(flag){
				vector<bool>color(n, true);
				int sum = 0;
				for(int& u : vertex){
					for(int& v : vertex){
						vector<int>path;
						int U = u, V = v;
						while(U != V){
							if(h[U] < h[V]){
								swap(U, V);
							}
							path.emplace_back(U = parent[U]);
						}
						for(int& i : path){
							if(i != u && i != v && s[i] == '1' && color[i]){
								color[i] = false;
								sum--;
							}
						}
					}
				}
				for(int& i : vertex){
					if(color[i]){
						sum++;
					}
				}
				maximize(ans, sum);
			}
		}
		cout << ans;
	}
}
namespace sub23{
	void solve(){
		
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	if(fopen(taskname".inp", "r")){
		freopen(taskname".inp", "r", stdin);
	}
	cin >> n;
	if(n <= 16){
		sub1::solve();
	}
	else{
		sub23::solve();
	}
}

컴파일 시 표준 에러 (stderr) 메시지

power.cpp: In function 'int main()':
power.cpp:85:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...