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;
}
View Code

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;
}
View Code

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;
}
View Code

D

 

以上是关于Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 982 C. Cut 'em all!(dfs)

CF982C Cut 'em all!

Codeforces Round #375(div 2)

Codeforces 1051E. Vasya and Big Integers

#0011.「codeforces」1354E Graph Coloring

codeforces #550D Regular Bridge 构造