信息传递--NOIP2015 day1 T2--暴力
这道题我用了判联通量加暴力,但联通量判炸了。。。。然后从code[VS]上看到个不错的代码,就拿来了^_^...
基本思路是去掉环外的点,然后走每一个联通块。
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int n,fa[],x[],ru[],g[];
bool w[];
//fa记录当前节点的传递目标,x记录每个环中每个点的长度
//ru记录每个点的入度,g记录每个环中的最终长度 //快速读入
int getint()
{
int w=,q=;
char c=getchar();
while ((c>''||c<'')&&c!='-')
c=getchar();
if (c=='-') q=,c=getchar();
while (c>=''&&c<='') w=w*+c-'',c=getchar();
return q?-w:w;
} //删除当前点,如果他的下一个点也只有一个入度,那么递归删除
void shan(int k)
{
w[k]=;
ru[fa[k]]--;
if(ru[fa[k]]==)
shan(fa[k]);
} int main()
{
n=getint();
for (int i=; i<=n; i++)
fa[i]=getint(),ru[fa[i]]++; //读入 for (int i=; i<=n; i++)
if(ru[i]==&&!w[i]) //如果当前点只有一个入度
shan(i); //调用删除程序 for (int i=; i<=n; i++)
if(!w[i]) //如果i没被删除
{
x[]=fa[i];
int y=fa[i],ans=;
while (i!=y) //当环没有找到终点时
w[y]=,y=fa[y],x[++ans]=y; //递推
for (int j=; j<=ans; j++)
g[x[j]]=ans; //用g[最后一个点]记录最后的距离
} int ans=0x7fffffff;
for (int i=;i<=n;i++)
if(!w[i]) //如果m未被删除
ans=min(ans,g[i]); //取最小值
printf("%d",ans);
}
附DFS一个
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector> using namespace std; const int MAXN = ; int n;
int fa[MAXN];
int dfn[MAXN];
int vis[MAXN], vi = ;;
int ans = 0x3f3f3f3f;
void dfs(int x, int df) { vis[x] = vi;
dfn[x] = df;
int nex = fa[x]; if (!vis[nex]) dfs(nex, df + );
else if (vis[nex] && vis[nex] != vi) return;
else if (vis[nex] == vi) {
ans = min(ans, df - dfn[nex] + );
return;
}
} int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &fa[i]);
}
for (int i = ; i <= n; i++) {
if (!vis[i]) {
vi++;
dfs(i, );
}
}
cout << ans << endl;
return ;
}
信息传递--NOIP2015 day1 T2--暴力的更多相关文章
- codevs 4511 信息传递(NOIP2015 day1 T2)
4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...
- 洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2
P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...
- 信息传递 NOIP2015 day1 T2
题文: 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮 ...
- 【 NOIP2015 DAY1 T2 信息传递】带权并查集
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 洛谷P2661 信息传递 [NOIP2015] 并查集/乱搞 (待补充!
感觉我好水啊,,,做个noip往年题目还天天只想做最简单的,,,实在太菜辽 然后最水的题目还不会正解整天想着乱搞,,, 虽然也搞出来辽233333 好滴不扯辽赶紧写完去做紫题QAQ 正解:并查集 ...
- 信息传递(NOIP2015)(寻找最小环。。)
原题传送门 这是一道寻找最小环的题目. 在做的时候给每一个点染色.. 防止再做已经搜过的点(优化) v[]表示是否访问的过,以及第一次访问该点的时间. u[]表示染色.. 这道题还可以用拓补排序做. ...
- 【NOIP2015提高组】 Day1 T2 信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- NOIP2015提高组T2 洛谷P2661 信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- [NOIP2015] 提高组 洛谷P2661 信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
随机推荐
- ZWave for Arduino
https://sites.google.com/site/arduinozwave/http://www.ebay.com/sch/i.html?_trksid=p2050601.m570.l131 ...
- ASP-----分页功能的实现
WEB 分页功能的实现后端C#代码部分: // 建立Linq 数据库的连接 private MYDateDataContext context = new MYDateDataContext(); / ...
- Matlab之类型转换
int转string:num2str(0); string转int:str2num('-1');
- Jquery AJax Post 返回值问题
var msg=0; Validater('abc'); function Validater(Name) { var itemId = 1; $.ajax({ url: 'adminmenu/Val ...
- 转: Python集合(set)类型的操作
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- 20140213-想念是while里的死循环
// stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件// #pragma once#include "targetver.h&qu ...
- NodeJS服务器:一行代码 = 一个的HTTP服务器
从这一篇开始,我们进入技术讲解的话题,逐步实现用NodeJS实现文件的传送共享服务. 前文我们讲过,NodeJS是最擅长做网络服务器的,今天我们就来用NodeJS做一个最简单的服务器. 先看一幅图: ...
- Http和Socket连接区别
相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Socket连接,先要明白TCP连接.手机能够使用联 ...
- 济南学习 Day 2 T3 am
[问题描述]m× m的方阵上有n棵葱,你要修一些栅栏把它们围起来.一个栅栏是一段沿着网格建造的封闭图形(即要围成一圈) .各个栅栏之间应该不相交.不重叠且互相不包含.如果你最多修k个栅栏,那么所有栅栏 ...
- Codevs 1083 Cantor表
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的 ...