UOJ UR#9 App管理器

题目传送门

题目大意大概就是给你一个混合图(既有有向边又有无向边),对于每条无向边,u-v,问删去u->v,或删去v->u那条可以使新图强连通。(保证数据有解)。

这道题前几个数据点送分。

枚举每一条边,先将它去掉,遍历图,如果可以达到所有点,即强连通。

比如去掉u->v,其实只要dfs(u),判断是否能到达v即可。
可以直接删去,否则删另一条边,删去后因为图强连通,所以对之后的操作无影响。

code:

#include <cstdio>
#include <cstring>
using namespace std;

int read()
{
    char c;while(c=getchar(),c<‘0‘||c>‘9‘);
    int x=c-‘0‘;while(c=getchar(),c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘;
    return x;
}

const int MAXN=5005;
int N,M,ide[MAXN<<1],vis[MAXN];
int head[MAXN],to[MAXN<<1],nxt[MAXN<<1],cnt;
struct node{
    int x,y,o,d;
}edge[MAXN];

void add(int x,int y)
{
    to[cnt]=y;
    nxt[cnt]=head[x];
    head[x]=cnt;
    cnt++;
}

void dfs(int now)
{
    vis[now]=1;
        for(int i=head[now];i!=-1;i=nxt[i]){
            if(!ide[i]&&!vis[to[i]]){
                dfs(to[i]);
            }
        }
}

int main()
{
    N=read(),M=read();
    memset(head,-1,sizeof head);
        for(int i=1;i<=M;i++){
            int x=read(),y=read(),o=read();
            add(x,y);if(!o)add(y,x);
            edge[i]=(node){x,y,o,cnt-1};
        }
        for(int i=1;i<=M;i++){
            if(edge[i].o){puts("0");continue;}
            memset(vis,0,sizeof vis);
            ide[edge[i].d]=1;
            dfs(edge[i].y);
            if(vis[edge[i].x]){
                puts("0");continue;
            }
            else{
                ide[edge[i].d]=0;
                ide[edge[i].d-1]=1;
            }
            puts("1");continue;
        }
    return 0;
}

原文地址:https://www.cnblogs.com/Cptraser/p/8848841.html

时间: 2024-11-02 19:37:01

UOJ UR#9 App管理器的相关文章

软件发布:佛经管理器 APP

项目类型:安卓应用 APP项目名称:佛经管理器下载地址:http://pan.baidu.com/s/1jIbFYsu项目技术:Java.Android.XML项目简介:从服务器上下载和更新佛经核心功能:1. 下载佛经2. 更新佛经3. 浏览佛经

[UOJ#128][BZOJ4196][Noi2015]软件包管理器

试题描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置.Debian/Ubuntu使用的apt-get,Fedora/CentOS使用的yum,以及OSX下可用的homebrew都是优秀的软件包管理器. 你决定设计你自己的软件包管理器.不可避免地,你要解决软件包之间的依赖问题.如果软件包A依赖软件包B,那

nodejs-npm模块管理器

JavaScript 标准参考教程(alpha) 草稿二:Node.js npm模块管理器 GitHub TOP npm模块管理器 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 简介 npm init npm set npm config npm info npm search npm list npm install 基本用法 安装不同版本 避免系统权限 npm update,npm uninstall npm run 参数 scripts脚本命令最佳实践 p

仿手机文件夹管理器

仿手机文件夹管理器,可以打开显示SD卡下是文件,可以进入下一级和返回上一级. 效果图: 关键代码入下: import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.ut

android v7兼容包RecyclerView的使用(三)——布局管理器的使用

前两篇文章 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的基本用法以及与它相关的重要的几个类,本篇文章介绍布局管理器的具体用法. 为了演示布局管理器的使用,找了很多个例子,都没有找到感觉合适的例子,后来google了一把,发现了一个比较适合说明问题的例子.所以就拿该例子来解释吧. 在演示布局管理器前,我们先把UI部分搭建完成.由于使用到了V7兼容包的另一个包CardView,所以在这

MacOS 如何使用软件包管理器 Homebrew-Cask 安装软件?

本文标签: Mac效率工具 Mac小工具 MacOS Homebrew-Cask Mac软件包管理器 软件包管理简介 苹果系统结合了Windows的图形界面以及Linux的命令行,现在开发人员都清一色的用Mac了. Linux系统下安装.更新软件都很方便,除了我感觉用CentOS系统的一些人还喜欢 老三部曲 :下载.编译.安装.大部分人都更习惯基于包管理系统安装软件,当然更新.移除软件也用包管理系统搞定了. Mac系统的包管理不像Linux是由操作系统自带的,Mac官方默认没有提供这样的包管理系

Android开发之通过包管理器获取安装应用信息

最近在自己写一个APP,有一个模块需要获取手机应用的一些信息.坑还是有,但都基本踩过了,自己把他实现了出来,实现方法还是很需要掌握的.底部弹出的对话框中四个选项的实现不多做说明,主要讲讲如何获取这些安装的应用信息.好了,不多说,看看效果图: 获取手机安装应用信息: 1.写一个JavaBean,用于存放应用信息,生产get,set方法. public class AppBean { private Drawable appIcon; private String appName; private

BZOJ4196 [NOI2015] 软件包管理器

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4196,http://uoj.ac/problem/128 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置.Debian/Ubuntu使用的apt-get,Fedora/Cen

PHP FastCGI进程管理器PHP-FPM的架构

PHP FastCGI进程管理器PHP-FPM的架构 一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能. 每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程. 每个worker进程能保持一个到MySQL/Me