码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #453 (Div. 2) a-c

时间:2017-12-21 01:56:04      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:include   vector   位置   res   int   clu   div   algorithm   struct   

A. Visiting a Friend

水题,但是需要注意段点初,及最后的位置

代码如下:

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=107;
int dis[N];
struct Node{
    int st,ed;
}a[N];
int cmp(Node c,Node d){
    if(c.ed==d.ed)
        return c.st<d.st;
    return c.ed<d.ed;
}
int main()
{
    int n,m;
    memset(dis,0,sizeof(dis));
    scanf("%d%d",&n,&m);
    int flag=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&a[i].st,&a[i].ed);
        for(int j=a[i].st;!flag&&j<=a[i].ed;j++)
        {
            if(a[i].st&&dis[a[i].st]==0)
                flag=1;
            else
                dis[j]++;
        }
    }
    if(dis[m]==0)
        flag=1;
    if(flag)
        puts("NO");
    else
        puts("YES");
return 0;
}

 

B. Coloring a Tree

额。。。也挺水的,dfs或bfs即可,起点任意一点即可

代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
const int N=1e4+7;
int vis[N];
vector<int>graph[N];
int c[N];
int res;
void dfs(int r,int cl)
{
    vis[r]=1;
    if(cl!=c[r])res++;
    for(int i=0;i<graph[r].size();i++)
    {
        if(!vis[graph[r][i]])
            dfs(graph[r][i],c[r]);
    }
}
int main()
{
    memset(vis,0,sizeof(vis));
    int n,m,x;
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
    {
        scanf("%d",&x);
        graph[i].push_back(x);
        graph[x].push_back(i);
    }
    for(int i=1;i<=n;i++)
        scanf("%d",&c[i]);
    res=0;
    dfs(1,-1);
    printf("%d\n",res);
    return 0;
}

 

C. Hashing Trees

找到规律,发现当a[i]>1&&a[i-1]>1是该树会出现异构,特判,第一棵树输出在某层的最后一个节点后连所有下一层的节点,以此类推。

找到出现异构的最底层,将这一层的进行修改(将第一个节点连在上一层的倒数第二位置上,其他节点连在上一层的最后位置上),其他层如第一棵树相同。·

 

代码如下:

#include <iostream>
#include <stdio.h>

using namespace std;
const int N=1e5+7;
int main()
{v
    int h;
    int a[N];
    scanf("%d",&h);
    for(int i=0;i<=h;i++)
        scanf("%d",&a[i]);
    int flag=0;
    int hc;
    for(hc=2;!flag&&hc<=h;hc++)
    {
        if(a[hc]>1&&a[hc-1]>1)
        {
            flag=1;
            break;
        }
    }
    if(!flag)
        puts("perfect");
    else
    {
        puts("ambiguous");
        int c=0;
        for(int i=0;i<=h;i++)
        {
                for(int j=1;j<=a[i];j++)
                    printf("%d ",c);
                c+=a[i];
        }
        printf("\n");
        c=0;
        for(int i=0;i<=h;i++)
        {
            if(hc==i)
            {
                for(int j=1;j<=a[i];j++)
                {
                    if(j==1)
                        printf("%d ",c-1);
                    else
                        printf("%d ",c);
                }
            }
            else{
                for(int j=1;j<=a[i];j++)
                    printf("%d ",c);
            }
            c+=a[i];
        }
        printf("\n");
    }
    return 0;
}

 

Codeforces Round #453 (Div. 2) a-c

标签:include   vector   位置   res   int   clu   div   algorithm   struct   

原文地址:http://www.cnblogs.com/lemon-jade/p/8076379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!