这道题我用了判联通量加暴力,但联通量判炸了。。。。然后从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--暴力的更多相关文章

  1. codevs 4511 信息传递(NOIP2015 day1 T2)

    4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...

  2. 洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2

    P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...

  3. 信息传递 NOIP2015 day1 T2

    题文: 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮 ...

  4. 【 NOIP2015 DAY1 T2 信息传递】带权并查集

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  5. 洛谷P2661 信息传递 [NOIP2015] 并查集/乱搞 (待补充!

    感觉我好水啊,,,做个noip往年题目还天天只想做最简单的,,,实在太菜辽 然后最水的题目还不会正解整天想着乱搞,,,  虽然也搞出来辽233333 好滴不扯辽赶紧写完去做紫题QAQ 正解:并查集  ...

  6. 信息传递(NOIP2015)(寻找最小环。。)

    原题传送门 这是一道寻找最小环的题目. 在做的时候给每一个点染色.. 防止再做已经搜过的点(优化) v[]表示是否访问的过,以及第一次访问该点的时间. u[]表示染色.. 这道题还可以用拓补排序做. ...

  7. 【NOIP2015提高组】 Day1 T2 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  8. NOIP2015提高组T2 洛谷P2661 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  9. [NOIP2015] 提高组 洛谷P2661 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

随机推荐

  1. 理论制作 Windows 开机动画

    第一次接触 Windows 开机动画是 2012 年,那时候魔方的版本号还是 3.12,魔方里面有个很酷炫狂霸拽的功能就是替换 Windows 7 的开机动画.一开始我是在IT之家论坛里下载开机动画, ...

  2. # HTML && CSS 学习笔记

    https://www.zybuluo.com/denglongku/note/532786 1.Div左右居中 <div>1<div> div{ width:300px; h ...

  3. Sass和Compass设计师指南

    注:配合查看:Sass 为什么使用Sass和Compass? 1.减少重复工作,加快开发进度 2.使用变量,便于记忆,变量使用$符号开头 3.自动转换RGBA颜色值 .color { color: $ ...

  4. PHP计算中英混输字符串长度

    最近做项目中碰到需要post value length check的这么一个情况 有这么一个需求, 需要backend来处理post过来的中英混输的数据. 对其限制的规则是中文10个字符, 英文20个 ...

  5. Mybatis源码解析(一)(2015年06月11日)

    一.简介 先看看Mybatis的源码结构图,Mybatis3.2.7版本包含的包共计19个,其他版本可能会少. 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为 ...

  6. LinearLayout和RelativeLayout

    LinearLayout和RelativeLayout 共有属性:java代码中通过btn1关联次控件android:id="@+id/btn1" 控件宽度android:layo ...

  7. CAS Ticket SSO 登录流程图

  8. iOS - 网络语线程(OC)

    1. 检测网络状态 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the vi ...

  9. 在iOS中,实现点击搜索结果隐藏搜索结果的方法。

    不知道有没有别的什么的好的方法,最近在实现一个需求(点击搜索,然后输入搜索内容,显示搜索出来的结果,然后点击搜索结果,在当前页面显示所点击的结果的详细的信息).遇到的问题是,点击搜索结果的时候,搜索的 ...

  10. 网站添加到IIS和附件进程调试(新手使用篇)

    一.网站添加到IIS 做网站开发,很有必要把项目添加到IIS中,这对浏览和后期的调试很有帮助.怎么把网站添加到IIS上? 1). 打开IIS,然后操作步骤如下图: 选择Default Web Site ...