zoukankan      html  css  js  c++  java
  • codeforces 645D Robot Rapping Results Report

    二分一下答案check即可。(拓扑排序)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #define maxv 100500
    #define maxe 200500
    using namespace std;
    int n,m,nume=0,g[maxv],x[maxv],y[maxv],d[maxv],rank[maxv];
    int cnt[maxv];
    queue <int> q;
    struct edge
    {
        int v,nxt;
    }e[maxe];
    void addedge(int u,int v)
    {
        e[++nume].v=v;
        e[nume].nxt=g[u];
        g[u]=nume;
    }
    bool check(int x)
    {
        int ret=0;while (!q.empty()) q.pop();
        for (int i=1;i<=n;i++) {d[i]=0;rank[i]=-1;cnt[i]=0;}
        for (int i=1;i<=x;i++) d[y[i]]++;
        for (int i=1;i<=n;i++)
        {
            if (!d[i])
            {
                if (ret) return false;
                q.push(i);ret++;rank[i]=1;cnt[1]++;
            }
        }
        while (!q.empty())
        {
            int head=q.front();q.pop();
            for (int i=g[head];i;i=e[i].nxt)
            {
                int v=e[i].v;
                if (i>x) continue;
                if (!--d[v])
                {
                    rank[v]=rank[head]+1;cnt[rank[v]]++;
                    q.push(v);
                }
            }
        }
        for (int i=1;i<=n;i++)
        {
            if (cnt[i]!=1)
                return false;
        }
        return true;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=m;i++)
        {
            scanf("%d%d",&x[i],&y[i]);
            addedge(x[i],y[i]);
        }
        int l=1,r=m,ans=-1;
        while (l<=r)
        {
            int mid=l+r>>1;
            if (check(mid)) {ans=mid;r=mid-1;}
            else l=mid+1;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    文件管理系统(JQuery插件+Ajax)
    十大Ajax框架
    WSS3.0开发你还在为写CAML痛苦吗?
    vue获取微博授权的URL
    微博三方登录原理
    阿里云短信服务
    JWT原理和COOKIE原理
    django数据库的ORM操作
    celery原理与组件
    生成微博授权URL
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5932416.html
Copyright © 2011-2022 走看看