P1211 街道赛跑
又是一下午的杠题,累啊~~~
这道题第一问很简单,只需去掉一个点,判断能不能到达终点就行了;
第二问其实仔细想想也不难,就是判断去掉一个点后是否形成两个图;首先要知道是建立在第一问的基础上的;在加边的同时预处理一个e2的双向图,分别列举第一问的点,将从0到这个点所经过的点做标记;再将这点到终点遍历一遍,看是否遇到已标记过的点就行了。
一个160行的代码,自己看吧...
#include <bits/stdc++.h> using namespace std;
const int MAXN = 5e5 + 100;
inline int read()
{
int x = ,ff = ;char ch = getchar();
while(!isdigit(ch))
{
if(ch == '-') ff = -;
ch = getchar();
}
while(isdigit(ch))
{
x = (x<<) + (x<<) + (ch ^ );
ch = getchar();
}
return x * ff;
} inline void write(int x)
{
if(x < ) putchar('-'),x = -x;
if(x > ) write(x / );
putchar(x % + '');
} struct node
{
int y,next;
}e[MAXN],e2[MAXN << 1];
int a,tot = ,head,tail,lin[MAXN];
int tot2 = ,lin2[MAXN],vis2[MAXN];
int q[MAXN],vis[MAXN],dis[MAXN];
int f[MAXN],top = ,F[MAXN],tom = ; void add(int xx,int yy)
{
e[++tot].y = yy;
e[tot].next = lin[xx];
lin[xx] = tot;
} void add2(int xx,int yy)
{
e2[++tot2].y = yy;
e2[tot2].next = lin2[xx];
lin2[xx] = tot2;
} void Init()
{
int flag = ;
for(int i = ;;++i)
{
int x;
for(;;)
{
x = read();
if(x == -) break;
if(x == -)
{
flag = ;
break;
}
add(i,x);
add2(i,x);
add2(x,i);
}
if(flag == )
{
a = i - ;
break;
}
}
} void check(int m)
{
memset(vis,false,sizeof(vis));
vis[] = true; vis[m] = true;
head = ,tail = ;
q[] = ;
for(head = ;head <= tail;++head)
{
int x = q[head];
for(int i = lin[x],y;i;i = e[i].next)
{
if(!vis[y = e[i].y])
{
vis[y] = true;
q[++tail] = y;
}
}
}
} bool check2(int m)
{
memset(vis,false,sizeof(vis));
memset(vis2,false,sizeof(vis2));
vis[] = true; vis[m] = true;
head = ,tail = ;
q[] = ;
for(head = ;head <= tail;++head)
{
int x = q[head];
for(int i = lin2[x],y;i;i = e2[i].next)
{
if(!vis[y = e2[i].y])
{
vis[y] = true;
q[++tail] = y;
}
}
} head = ,tail = ;
q[] = m; vis2[m] = true; vis[m] = false;
for(head = ;head <= tail;++head)
{
int x = q[head];
for(int i = lin[x],y;i;i = e[i].next)
{
if(vis[y = e[i].y]) return false;
if(!vis2[y])
{
vis2[y] = true;
q[++tail] = y;
}
}
}
return true;
} int main()
{
Init();
for(int i = ;i < a;++i)
{
check(i);
if(!vis[a]) f[++top] = i;
}
write(top); putchar(' ');
for(int i = ;i <= top;++i)
{
write(f[i]);
putchar(' ');
}
putchar('\n');
for(int i = ;i <= top;++i)
{
if(check2(f[i])) F[++tom] = f[i];
}
write(tom); putchar(' ');
for(int i = ;i <= tom;++i)
{
write(F[i]);
putchar(' ');
}
return ;
}
P1211 街道赛跑的更多相关文章
- USACO Section 4
前言 好久没更新这个系列了,最近闲的无聊写一下.有两题搜索懒得写了. P2737 [USACO4.1]麦香牛块Beef McNuggets https://www.luogu.com.cn/probl ...
- struts-hibernate-ajax完成区县和街道级联下拉框功能(二补充使用json解析list结果集,ajax循环json层级处理)
针对<struts-hibernate-ajax完成区县和街道级联下拉框功能>进行补充,上一篇中,要在action中拼接JSON格式字符串,很容易手抖.直接用json处理一下转成json格 ...
- struts-hibernate-ajax完成区县和街道级联下拉框功能
前言:这次dao用的是hibernate,控制层和显示层用的是struts,页面用的是ajax... 啰嗦:我做这个用了很久,用了2周,难点没破解的地方,hibernate的多对一关系生成实体类中属性 ...
- 数据分析 - 开放街道地图(OpenStreetMap)
数据分析 - 开放街道地图(OpenStreetMap) Reinhard使用OpenStreetMap的开放地图数据作为本次数据分析的数据源,使用Python进行数据清洗,使用MongoDB进行数据 ...
- (转) C#多线程赛跑实例
专于:http://blog.csdn.net/lidatgb/article/details/8363035 结合上篇<多线程的基础>,这次我们写一个多线程的赛跑实例,内容很简单:超人和 ...
- 洛谷P1211 [USACO1.3]牛式 Prime Cryptarithm
P1211 [USACO1.3]牛式 Prime Cryptarithm 187通过 234提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 题面错误 题目描述 ...
- python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2
python编写一个三级while的循环菜单 1.定义字典,字典里面嵌套字典,内嵌字典的值为列表. 思路: 湖北省的市:字典中的定义3个字典,用于存储{序列-键:市名} shiqu_dir = {} ...
- Java多线程之赛跑游戏
在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...
- C#编写街道管理系统
项目需求: 一.语言和环境 A.实现语言 C# B.环境要求 Visual Studio 2012 二.功能要求 现使用.NET WinForms技术为居委会开发一个街道管理软件,其中街道管理窗体界面 ...
随机推荐
- Effective C++ 条款六 若不想使用编译器自动生成的函数,就该明确拒绝
class HomeForSale //防止别人拷贝方法一:将相应的成员函数声明为private并且不予实现 { public: private: HomeForSale(const HomeForS ...
- 利用卷积神经网络(CNN)构造社区问答系统
/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 ...
- boost::serialization 用基类指针转存派生类(错误多多,一波三折)
boost::serialization 也支持c++的多态,这样我们就能够通过使用基类的指针来转存派生类, 我们接着上一篇( boost::serialization(2)序列化基类 )的样例来看: ...
- 前端编程提高之旅(五)----写给大家看的css书
自实习也有几个月的时间了,以爱奇艺实习为敲门砖.进入了眼下这家公司.假设说当初能进爱奇艺是暂时袭击DIV+CSS的话,眼下在这家公司体验到.不论什么技术都必须悉知原理,这样才干做到庖丁解牛.做一 ...
- 聊聊高并发(三十二)实现一个基于链表的无锁Set集合
Set表示一种没有反复元素的集合类,在JDK里面有HashSet的实现,底层是基于HashMap来实现的.这里实现一个简化版本号的Set,有下面约束: 1. 基于链表实现.链表节点依照对象的hashC ...
- Android 通过Application 传递数据
</pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * C ...
- visual studio 2013 update 3正式版出来了
微软的更新速度还是蛮快的吗.新版本号出来了,大家快下载体验一下吧,详细下载地址在http://www.visualstudio.com/zh-cn/downloads/download-visual- ...
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
这里能够简单的改动随意函数的返回地址.能够做到自己定义EIP的指向,就可以运行当前进程空间的随意指令,这里仅仅是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取随意 ...
- MAC Safari上网弹窗弹广告的最新有效解决方法
7.3更新: 之前更改DNS好了一段时间,最近在打开其它网页时还是会弹广告: 最终解决方法: 安装MALWAREBYTES 3清理一下: 网址:Free Cyber Security & An ...
- TCO 2016 Round 1B
problem 250 Problem Statement Vasa likes to construct sequences of numbers. If you tell him a positi ...