zoukankan      html  css  js  c++  java
  • 【NOIP2015模拟10.27】挑竹签

    Description
    挑竹签——小时候的游戏
    夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏。
    挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签。如果动了其他的竹签,就要换对手来挑。在所有的竹签都被挑走之后,谁挑走的竹签总数多,谁就胜了。
    身为神明的诹访子自然会让早苗先手。为了获胜,早苗现在的问题是,在诹访子出手之前最多能挑走多少竹签呢?
    为了简化问题,我们假设当且仅当挑最上层的竹签不会动到其他竹签。

    Input
    输入文件mikado.in。
    第一行输入两个整数n,m, 表示竹签的根数和竹签之间相压关系数。
    第二行到m+1 行每行两个整数u,v,表示第u 根竹签压住了第v 根竹签。

    Output
    输出文件mikado.out。
    一共一行,一个整数sum,表示最多能拿走sum 根竹签。

    Sample Input
    6 6
    1 2
    2 3
    3 1
    4 3
    4 5
    6 5

    Sample Output
    3
    样例解释:
    一共有6 根竹签,其中1 压住2,2 压住3,3 压住1,4 压住3 和5,6 压住5。最优方案中,我们可以依次挑走4、6、5 三根竹签。而剩下的三根相互压住,都无法挑走。所以最多能挑走3 根竹签。

    Data Constraint
    对于20% 的数据,有1<= n,m<= 20。
    对于40% 的数据,有1 <= n,m <= 1 000。
    对于100% 的数据,有1 <= n,m <= 1 000 000。
    .
    .
    .
    .
    .

    分析

    拓扑排序即可
    .
    .
    .
    .
    .

    程序:
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int a[1000001],h[1000001],next[1000001],chu[1000001],ru[1000001];
    int i,l,n,m,ans,tj;
    void add(int x,int y)
    {
        ru[y]++;
        chu[++tj]=y;
        next[tj]=h[x];
        h[x]=tj;
    }
    
    int main()
    {
        freopen("mikado.in","r",stdin);
        freopen("mikado.out","w",stdout);
        cin>>n>>m;
        for (int i=1;i<=m;i++)
        {
            int x,y;
            cin>>x>>y;
            add(x,y);
        }
        int k=1;l=0;
        for (int i=1;i<=n;i++)
        if (!ru[i]) a[++l]=i;
        while (k<=l)
        {
            int s=a[k++];
            ans++;
            int w=h[s];
            while (w!=0)
            {
                ru[chu[w]]--;
                if (!ru[chu[w]]) a[++l]=chu[w];
                w=next[w];
            }
        }
        cout<<ans;
        return 0;
        fclose(stdin);
        fclose(stdout);
    }
  • 相关阅读:
    mysql TO_DAYS()函数
    MySQL year函数
    protobuff java 包编译(Windows)
    苹果笔记本只有电源键能用的解决办法
    linux普通用户获取管理员权限
    linux用户管理
    基于ASIHTTPRequest封装的HttpClient
    Object-C 多线程中锁的使用-NSLock
    appstore 上传需要的icon
    iPhone之IOS5内存管理(ARC技术概述)
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499927.html
Copyright © 2011-2022 走看看