Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location
Posted Aragaki
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location相关的知识,希望对你有一定的参考价值。
A
/*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; const ll LLmaxn = 2e18; const int N = 100005; inline int readint() { char c = getchar(); int ans = 0; while (c < ‘0‘ || c > ‘9‘) { c = getchar(); } while (c >= ‘0‘ && c <= ‘9‘) { ans = ans * 10 + c - ‘0‘, c = getchar(); } return ans; } int main() { int n; n = readint(); string a; cin >> a; if (a.size() == 1) { if (a[0] == ‘0‘) { cout << "No" << endl; } else { cout << "Yes" << endl; } } else { if (a[0] + a[1] != ‘0‘ + ‘1‘) { cout << "No" << endl; return 0; } if (a[a.size() - 1] + a[a.size() - 2] != ‘0‘ + ‘1‘) { cout << "No" << endl; return 0; } for (int i = 1; i < a.size() - 1; i++) { if (a[i] == ‘0‘) { if (a[i - 1] == ‘0‘ && a[i + 1] == ‘0‘) { cout << "No" << endl; return 0; } } else { if (a[i - 1] == ‘1‘ || a[i + 1] == ‘1‘) { cout << "No" << endl; return 0; } } } cout<<"Yes"<<endl; } return 0; }
B
/*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; const ll LLmaxn = 2e18; const int N = 200005; inline int readint() { char c = getchar(); int ans = 0; while (c < ‘0‘ || c > ‘9‘) { c = getchar(); } while (c >= ‘0‘ && c <= ‘9‘) { ans = ans * 10 + c - ‘0‘, c = getchar(); } return ans; } priority_queue<pair<int, int>, vector<pair<int, int> >, less<pair<int, int> > > quemax; priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > quemin; int visit[N]; int main() { int now; pair<int, int> cnt; int n; cin >> n; for (int i = 1; i <= n; i++) { now = readint(); quemin.push(make_pair(now, i)); } string a; cin >> a; int value, aim; for (int i = 0; i < a.size(); i++) { if (a[i] == ‘0‘) { cnt=quemin.top(); quemin.pop(); cout<<cnt.second<<" "; quemax.push(cnt); } else { cnt=quemax.top(); quemax.pop(); cout<<cnt.second<<" "; } } return 0; }
C
/*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; const ll LLmaxn = 2e18; const int N = 100005; inline int readint() { char c = getchar(); int ans = 0; while (c < ‘0‘ || c > ‘9‘) { c = getchar(); } while (c >= ‘0‘ && c <= ‘9‘) { ans = ans * 10 + c - ‘0‘, c = getchar(); } return ans; } vector<int> f[N]; int du[N]; int ans[N]; int n; int u, v; int aim; int number = 0; int getans(int x, int pre) { ans[x] = 1; int len = f[x].size(); if (len == 1 && x != aim) { return ans[x]; } for (int i = 0; i < len; i++) { int to = f[x][i]; if (to == pre) { continue; } getans(to, x); ans[x] += ans[to]; } if(ans[x]%2==0&&ans[x]!=n) number++; return ans[x]; } int main() { n = readint(); if (n % 2) { cout << -1 << endl; return 0; } for (int i = 1; i <= n - 1; i++) { u = readint(), v = readint(); f[u].push_back(v); f[v].push_back(u); du[u]++, du[v]++; } for (int i = 1; i <= n; i++) { if (du[i] == 1) { aim = i; getans(i, -1); break; } } cout<<number<<endl; return 0; }
D
以上是关于Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 982 C. Cut 'em all!(dfs)
Codeforces 1051E. Vasya and Big Integers