# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1170004 | SmuggingSpun | Meetings 2 (JOI21_meetings2) | C++20 | 16 ms | 328 KiB |
#include<bits/stdc++.h>
#define taskname "C"
using namespace std;
const int lim = 2e5 + 5;
const int INF = 1e9;
template<class T>bool minimize(T& a, T b){
if(a > b){
a = b;
return true;
}
return false;
}
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);
}
vector<vector<int>>d(n, vector<int>(n, -1));
for(int i = 0; i < n; i++){
queue<int>q;
q.push(i);
d[i][i] = 0;
while(!q.empty()){
int u = q.front();
q.pop();
for(int& v : g[u]){
if(d[i][v] == -1){
d[i][v] = d[i][u] + 1;
q.push(v);
}
}
}
}
vector<int>ans(n + 1, 0);
for(int mask = (1 << n) - 1; mask > 0; mask--){
vector<int>p;
for(int i = 0; i < n; i++){
if(1 << i & mask){
p.emplace_back(i);
}
}
int cnt = 0, opt = INF;
for(int i = 0; i < n; i++){
int distance = 0;
for(int& j : p){
distance += d[i][j];
}
if(minimize(opt, distance)){
cnt = 0;
}
if(opt == distance){
cnt++;
}
}
maximize(ans[p.size()], cnt);
}
for(int i = 1; i <= n; i++){
cout << ans[i] << "\n";
}
}
}
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) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |