小阮的菜田
一个人一种命,各安天命吧。
C++博客
首页
新随笔
联系
聚合
管理
随笔-141 评论-9 文章-3 trackbacks-0
USACO 4.3.3 Street Race(连通性,DFS)
第一问, 枚举地拿掉每个点u,看能否连通(dfs 到n),能连通的就是必需经过的点,对于点u 进行DFS,看会不会重复经过第一问中已经访问过的点,若都没有经过,则该u点符合第二问。
/**/
/*
ID: lorelei3
TASK: race3
LANG: C++
*/
#include
<
fstream
>
#include
<
memory.h
>
using
namespace
std;
const
int
MAX
=
55
;
ifstream fin(
"
race3.in
"
);
ofstream fout(
"
race3.out
"
);
int
map[MAX][MAX];
int
visited[MAX], ans1[MAX], ans2[MAX], cnt1, cnt2, n;
void
input()
{
int
i
=
0
,
in
=
0
;
while
(fin
>>
in
&&
in
!=-
2
)
{
int
t
=
in
;
int
c
=
++
map[i][
0
];
map[i][c]
=
t;
while
(fin
>>
t
&&
t
!=-
2
)
{
int
c
=
++
map[i][
0
];
map[i][c]
=
t;
}
i
++
;
}
fin
>>
in
;
n
=
i;
}
bool
dfs1(
int
u)
{
if
(u
==
n)
return
true
;
for
(
int
i
=
1
; i
<=
map[u][
0
];
++
i)
{
int
v
=
map[u][i];
if
(visited[v]
==
0
)
{
visited[v]
=
1
;
if
(dfs1(v))
return
true
;
}
}
return
false
;
}
bool
rep;
void
dfs2(
int
u)
{
if
(rep)
return
;
if
(visited[u]
==
2
)
return
;
visited[u]
=
2
;
for
(
int
i
=
1
; i
<=
map[u][
0
];
++
i)
{
int
v
=
map[u][i];
if
(visited[v]
==
1
)
{
rep
=
true
;
return
;
}
dfs2(v);
}
}
void
solve()
{
for
(
int
i
=
1
; i
<
n;
++
i)
{
memset(visited,
0
,
sizeof
(visited));
visited[i]
=
1
;
visited[
0
]
=
1
;
if
(
!
dfs1(
0
))
{
ans1[cnt1
++
]
=
i;
rep
=
false
;
dfs2(i);
if
(rep
==
false
)
ans2[cnt2
++
]
=
i;
}
}
}
void
output()
{
int
i;
fout
<<
cnt1;
if
(cnt1
!=
0
)
{
fout
<<
"
"
;
for
(i
=
0
; i
<
cnt1
-
1
;
++
i)
fout
<<
ans1[i]
<<
"
"
;
fout
<<
ans1[cnt1
-
1
];
}
fout
<<
endl;
fout
<<
cnt2;
if
(cnt2
!=
0
)
{
fout
<<
"
"
;
for
(i
=
0
; i
<
cnt2
-
1
;
++
i)
fout
<<
ans2[i]
<<
"
"
;
fout
<<
ans2[cnt2
-
1
];
}
fout
<<
endl;
}
int
main()
{
input();
solve();
output();
return
0
;
}
posted on 2011-01-29 20:01
小阮
阅读(354)
评论(0)
编辑
收藏
引用
所属分类:
USACO
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
USACO_MAR11 Spiral (螺旋矩阵, 模拟)
USACO 6.1.2 A Rectangular Barn (最大子矩阵, DP)
USACO 6.1.1 Postal Vans (哈密顿回路, 递推, 高精度计算)
USACO 5.5.3 Two Five (DP)
USACO 5.5.2 Hidden Passwords (后缀数组)
USACO 5.5.1 Picture (离散化)
USACO 5.4.5 TeleCowmunication (最小点割集, Dinic)
USACO 5.4.4 Betsy's Tour (DFS+剪枝)
USACO 5.4.3 Character Recognition (DP)
USACO 5.4.2 Canada Tour (DP)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2011年3月
>
日
一
二
三
四
五
六
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
C++程序设计语言(6)
POJ(13)
USACO(97)
计算几何(5)
数据结构和算法(20)
网络编程(1)
随笔档案
2011年10月 (2)
2011年6月 (3)
2011年5月 (2)
2011年4月 (6)
2011年3月 (17)
2011年2月 (25)
2011年1月 (24)
2010年12月 (28)
2010年11月 (34)
文章档案
2011年2月 (3)
搜索
最新评论
1. re: USACO 4.2.3 Job Processing (平均贪心)
如何证明其正确性
--膜
2. re: USACO 5.2.2 Electric Fences (模拟退火算法)[未登录]
666@匿名
--xixi
3. re: USACO 2.3.1 The Longest Prefix [未登录]
发现一个错误,对于测试实例
AE ABC CDEF .
ABCDEFG
错误
正确答案是3
--z
4. re: USACO 4.2.3 Job Processing (平均贪心)
平均的贪心,好像没听说诶。
--怡红公子
5. re: USACO 5.4.2 Canada Tour (DP)
不明白如何去除重复的,就是怎么解决两个人交叉问题?
--zyz913614263
阅读排行榜
1. 计算几何 - 判断线段相交(转)(3744)
2. N个点中求三个点组成的三角形面积最大(2059)
3. [网络流]最小路径覆盖问题 (二分图最大匹配, 最大流)(1764)
4. ural 1297 最长回文子串(后缀数组)(1687)
5. [网络流] 方格取数问题 ( 二分图点权最大独立集, 最小割模型, 最大流)(1378)
评论排行榜
1. USACO 5.2.2 Electric Fences (模拟退火算法)(3)
2. USACO 4.2.3 Job Processing (平均贪心)(2)
3. pku 1948 Triangular Pastures (01背包)(1)
4. USACO 2.3.1 The Longest Prefix (1)
5. pku 1625 Censored! (AC自动机, DP, 高精度加法)(1)