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\n",ans);
    return 0;
}
时间: 2024-10-26 16:58:36

codeforces 645D Robot Rapping Results Report的相关文章

codeforces 655D D. Robot Rapping Results Report(拓扑排序+拓扑序记录)

题目链接: D. Robot Rapping Results Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output While Farmer John rebuilds his farm in an unfamiliar portion of Bovinia, Bessie is out trying some alt

CF #CROC 2016 - Elimination Round D. Robot Rapping Results Report 二分+拓扑排序

题目链接:http://codeforces.com/contest/655/problem/D 大意是给若干对偏序,问最少需要前多少对关系,可以确定所有的大小关系. 解法是二分答案,利用拓扑排序看是否所有关系被唯一确定.即任意一次只能有1个元素入度为0入队. 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <string> 5 #include <

CROC 2016 - Elimination Round (Rated Unofficial Edition) D. Robot Rapping Results Report 拓扑排序+二分

题目链接: http://www.codeforces.com/contest/655/problem/D 题意: 题目是要求前k个场次就能确定唯一的拓扑序,求满足条件的最小k. 题解: 二分k的取值,做拓扑排序的时候只要每次只有一个元素没有前驱就可以唯一了. #include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<queue> #includ

Codeforces 97D Robot in Basement bitset+模拟

题目链接:点击打开链接 题意: 每个点有一个机器人(.),下面是一些指令,每次发出指令(一个字母)所有机器人都会执行移动. 当机器人到E点就会离开. 若机器人前方是'#' 或者边界则停留原地.一个方格可以站多个机器人. bitset模拟.. #include <cstdio> #include <cstring> #include <algorithm> #include <bitset> using namespace std; char s[100005

CodeForces 626A Robot Sequence

枚举一下就好,时间复杂度o(n*n) #include<cstdio> #include<cstring> #include<cmath> #include<string> #include<vector> #include<queue> #include<algorithm> #include<iostream> using namespace std; struct X { int x; int y; }p

[Codeforces 346D] Robot Control(01BFS)

题意 有一个 \(N\) 个点, \(M\) 条边的有向图, 初始有一个机器人在 \(1\) 号点. 每个时刻, 这个机器人会随机选择一条从该点出发地边并通过.当机器人到达点 \(N\) 时, 它就会自动关闭. 然而这个机器人如果在某个时刻到达自己曾经到过的点的话, 它就会爆炸. 因此, 你决定对机器人实施一些命令, 让它在某些时候按照规定的边走, 而非随机选择. 问对机器人最少使用多少条命令可以让它安全到达点 \(N\) . \(N, M \le 10^6\) 题解 十分巧妙的一道好题- 首先

Robot Framework使用Phantomjs进行无界面UI自动化测试

Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Library (RFS).一般要使用Selenium2Library库,必须配置好浏览器驱动(driver).不然就无法驱动浏览器来执行自动化命令. 浏览器驱动对应表 上表简要说明了不同的浏览器所需要的驱动程序.这里我们重点介绍如何基于rfs+phantomjs进行无界面UI自动化测试. phantomj

COMP0037 Coursework Investigating Path Planning Algorithms

COMP0037 Coursework 1Term 2, 2019"Path Planning in a Known World"Investigating Path Planning AlgorithmsCOMP0037 Assignment 1Simon Julier ([email protected]), Dan Butters ([email protected]), Julius Sustarevas([email protected])Version: 21st Janu

CS 545: Introduction to Robotics

CS 545: Introduction to Robotics Fall 2019HW 3: Inverse KinematicsIn this assignment, you will compute numerically the inverse kinematics of a planarrobot with n = 3 rotational joints. Specifically, our goal is to compute the joint-positionsthat brin