提出 #62138147
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int n, m, s, t;
vector<vector<int>> to;
bool check()
{
if (m != n - 1)
return true;
int mx = 0;
for (int i = 1; i <= n; ++i)
mx = max(mx, (int)to[i].size());
return mx > 2;
}
void bfs(int s, vector<bool> &ban, vector<int> &dis, vector<int> &pre)
{
for (int i = 1; i <= n; ++i)
{
dis[i] = inf;
}
queue<int> q;
q.push(s);
dis[s] = 0;
while (!q.empty())
{
int u = q.front();
q.pop();
for (int v : to[u])
{
if (ban[v])
continue;
if (dis[v] > dis[u] + 1)
{
dis[v] = dis[u] + 1;
q.push(v);
pre[v] = u;
}
}
}
}
int main()
{
cin >> n >> m >> s >> t;
to.resize(n + 1);
for (int i = 1; i <= m; ++i)
{
int u, v;
cin >> u >> v;
to[u].push_back(v);
to[v].push_back(u);
}
vector<int> dis(n + 1), dis2(n + 1), dis3(n + 1);
vector<int> pre(n + 1);
vector<bool> ban(n + 1);
bfs(s, ban, dis, pre);
vector<bool> in_road(n + 1);
vector<int> road;
for (int i = t; i != s; i = pre[i])
{
road.push_back(i);
in_road[i] = true;
}
in_road[s] = true;
road.push_back(s);
ban[t] = true;
bfs(s, ban, dis2, pre);
ban[t] = false;
ban[s] = true;
bfs(t, ban, dis3, pre);
ban[s] = false;
int ans = inf;
for (int v = 1; v <= n; ++v)
if (!in_road[v] && dis2[v] != inf && dis3[v] != inf)
{
ans = min(ans, dis[t] + dis2[v] + dis3[v]);
}
for (int v = 1; v <= n; ++v)
if (!in_road[v])
{
for (int vv : to[v])
if (vv != s && vv != t && in_road[vv])
ans = min(ans, dis[t] * 2 + 2);
}
for (int u = 1; u <= n; ++u)
if (u != s && u != t && in_road[u])
ban[u] = true;
vector<int> deg(n + 1);
for (int u = 1; u <= n; ++u)
for (int v : to[u])
if (!(in_road[u] && in_road[v]))
{
++deg[u];
}
{
ban[t] = true;
bfs(s, ban, dis2, pre);
ban[t] = false;
ban[s] = true;
bfs(t, ban, dis3, pre);
ban[s] = false;
int x = inf, y = inf;
for (int u = 1; u <= n; ++u)
if (dis2[u] != inf && deg[u] >= 3)
{
x = min(x, dis2[u]);
}
if (deg[s] >= 2)
x = 0;
for (int u = 1; u <= n; ++u)
if (dis3[u] != inf && deg[u] >= 3)
{
y = min(x, dis3[u]);
}
if (deg[t] >= 2)
y = 0;
int z = min(x, y);
if (z != inf)
{
ans = min(ans, 2 * dis[t] + (z + 1) * 4);
}
}
if (ans == inf)
ans = -1;
cout << ans << '\n';
}
/*
1. 检查图是否是一条链,如果是,输出-1
2.
先取一条s到t的最短路径,设路径为
s,u1,u2,...,uk,t
3. 先考虑走两条不同路径的情况:
对于一个点v,v不属于这条路径上的点
那么经过点v需要的步数是 dis(s,t)+dis2(s,v)+dis3(v,t)
注意:dis2(s,v)不能经过点t,即删掉点t再做最短路计算
注意:dis3(v,t)不能经过点s,即删掉点s再做最短路计算
在所有点v中去取这个距离最小的即可
4. 如果存在一个点v,v不属于这条路径上的点,且v与u1,u2,...,uk中任意一个点相邻
则答案和2+2dis(s,t)取min
5.
删除点u1,u2,...,uk后
如果点s和点t不在一个连通块:
设x为点s走到的第一个度数>=3的点的距离(没有就是inf)
设y为点t走到的第一个度数>=3的店的距离(没有就是inf)
设 z=min(x,y)
答案和2dis(s,t)+4(z+1)取min
4 3 2 3
1 2
2 3
2 4
*/
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Moving Pieces on Graph |
| ユーザ | JingTang |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 0 |
| コード長 | 4035 Byte |
| 結果 | WA |
| 実行時間 | 262 ms |
| メモリ | 19676 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||||
|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 0 / 700 | ||||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 01_handmade_04.txt, 01_handmade_05.txt, 01_handmade_06.txt, 02_line_00.txt, 02_line_01.txt, 02_line_02.txt, 03_line_like_00.txt, 03_line_like_01.txt, 03_line_like_02.txt, 03_line_like_03.txt, 03_line_like_04.txt, 03_line_like_05.txt, 03_line_like_06.txt, 03_line_like_07.txt, 03_line_like_08.txt, 03_line_like_09.txt, 03_line_like_10.txt, 03_line_like_11.txt, 03_line_like_12.txt, 03_line_like_13.txt, 03_line_like_14.txt, 03_line_like_15.txt, 03_line_like_16.txt, 03_line_like_17.txt, 03_line_like_18.txt, 03_line_like_19.txt, 03_line_like_20.txt, 03_line_like_21.txt, 03_line_like_22.txt, 03_line_like_23.txt, 04_circle_like_00.txt, 04_circle_like_01.txt, 04_circle_like_02.txt, 04_circle_like_03.txt, 04_circle_like_04.txt, 04_circle_like_05.txt, 04_circle_like_06.txt, 04_circle_like_07.txt, 04_circle_like_08.txt, 04_circle_like_09.txt, 05_dense_00.txt, 05_dense_01.txt, 05_dense_02.txt, 06_random_00.txt, 06_random_01.txt, 06_random_02.txt, 06_random_03.txt, 06_random_04.txt, 06_random_05.txt, 06_random_06.txt, 06_random_07.txt, 06_random_08.txt, 06_random_09.txt, 07_uni_00.txt, 07_uni_01.txt, 07_uni_02.txt, 07_uni_03.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3484 KiB |
| 00_sample_01.txt | AC | 1 ms | 3404 KiB |
| 00_sample_02.txt | AC | 1 ms | 3452 KiB |
| 01_handmade_00.txt | AC | 1 ms | 3408 KiB |
| 01_handmade_01.txt | AC | 1 ms | 3420 KiB |
| 01_handmade_02.txt | AC | 1 ms | 3476 KiB |
| 01_handmade_03.txt | AC | 1 ms | 3460 KiB |
| 01_handmade_04.txt | AC | 1 ms | 3416 KiB |
| 01_handmade_05.txt | AC | 167 ms | 15464 KiB |
| 01_handmade_06.txt | AC | 195 ms | 18684 KiB |
| 02_line_00.txt | AC | 5 ms | 3832 KiB |
| 02_line_01.txt | AC | 214 ms | 18464 KiB |
| 02_line_02.txt | AC | 261 ms | 18816 KiB |
| 03_line_like_00.txt | AC | 252 ms | 17844 KiB |
| 03_line_like_01.txt | AC | 254 ms | 17856 KiB |
| 03_line_like_02.txt | AC | 166 ms | 12788 KiB |
| 03_line_like_03.txt | AC | 198 ms | 17832 KiB |
| 03_line_like_04.txt | AC | 81 ms | 11304 KiB |
| 03_line_like_05.txt | AC | 148 ms | 17648 KiB |
| 03_line_like_06.txt | AC | 68 ms | 10700 KiB |
| 03_line_like_07.txt | AC | 191 ms | 18572 KiB |
| 03_line_like_08.txt | AC | 220 ms | 18240 KiB |
| 03_line_like_09.txt | AC | 137 ms | 13168 KiB |
| 03_line_like_10.txt | AC | 84 ms | 11904 KiB |
| 03_line_like_11.txt | AC | 208 ms | 18660 KiB |
| 03_line_like_12.txt | AC | 178 ms | 18604 KiB |
| 03_line_like_13.txt | AC | 174 ms | 18272 KiB |
| 03_line_like_14.txt | AC | 183 ms | 16008 KiB |
| 03_line_like_15.txt | AC | 70 ms | 11168 KiB |
| 03_line_like_16.txt | AC | 165 ms | 19124 KiB |
| 03_line_like_17.txt | AC | 262 ms | 18740 KiB |
| 03_line_like_18.txt | AC | 3 ms | 3584 KiB |
| 03_line_like_19.txt | AC | 3 ms | 3568 KiB |
| 03_line_like_20.txt | AC | 1 ms | 3572 KiB |
| 03_line_like_21.txt | AC | 1 ms | 3536 KiB |
| 03_line_like_22.txt | AC | 2 ms | 3476 KiB |
| 03_line_like_23.txt | WA | 2 ms | 3476 KiB |
| 04_circle_like_00.txt | AC | 246 ms | 18848 KiB |
| 04_circle_like_01.txt | AC | 198 ms | 18480 KiB |
| 04_circle_like_02.txt | AC | 222 ms | 18732 KiB |
| 04_circle_like_03.txt | AC | 219 ms | 18788 KiB |
| 04_circle_like_04.txt | AC | 194 ms | 18588 KiB |
| 04_circle_like_05.txt | AC | 22 ms | 5756 KiB |
| 04_circle_like_06.txt | AC | 22 ms | 5732 KiB |
| 04_circle_like_07.txt | AC | 23 ms | 5836 KiB |
| 04_circle_like_08.txt | AC | 22 ms | 5700 KiB |
| 04_circle_like_09.txt | AC | 23 ms | 5820 KiB |
| 05_dense_00.txt | AC | 56 ms | 6344 KiB |
| 05_dense_01.txt | AC | 10 ms | 3904 KiB |
| 05_dense_02.txt | AC | 28 ms | 4928 KiB |
| 06_random_00.txt | AC | 112 ms | 10396 KiB |
| 06_random_01.txt | AC | 118 ms | 10432 KiB |
| 06_random_02.txt | AC | 174 ms | 16548 KiB |
| 06_random_03.txt | AC | 162 ms | 12884 KiB |
| 06_random_04.txt | AC | 130 ms | 10096 KiB |
| 06_random_05.txt | AC | 163 ms | 16920 KiB |
| 06_random_06.txt | AC | 130 ms | 9904 KiB |
| 06_random_07.txt | AC | 179 ms | 16088 KiB |
| 06_random_08.txt | AC | 164 ms | 16292 KiB |
| 06_random_09.txt | AC | 168 ms | 18068 KiB |
| 07_uni_00.txt | AC | 68 ms | 12676 KiB |
| 07_uni_01.txt | AC | 22 ms | 6884 KiB |
| 07_uni_02.txt | AC | 124 ms | 18820 KiB |
| 07_uni_03.txt | AC | 124 ms | 19676 KiB |