CodeForces - 601A The Two Routes

http://codeforces.com/problemset/problem/601/A

这道题没想过来, 有点脑筋急转弯的感觉了

本质上就是找最短路径 但是卡在不能重复走同一个点 ---->>> 这是来坑人的

因为这是一个完全图(不是被road 连接  就是被rail连接 ) 所以一定有一条直接连1 和 n的路径

那么只用找没有连 1 和 n 的路径的 那个图的最短路即可

然后这个dijkstra写的是O(V^2)的写法

以后尽量用优先队列的写法O(ElogV)

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define INF 0x3f3f3f3f
 5 using namespace std;
 6
 7 int rail[401][401];
 8 int road[401][401];
 9 int n, m;
10
11 int dijkstra(int town[401][401])
12 {
13     int dist[401];
14     bool use[401];
15     memset(use, 0, sizeof(use));
16     fill(dist, dist+n+1, INF);
17     dist[1] = 0;
18     while (true)
19     {
20         int v = -1;
21         for (int i = 1; i <= n; i++)
22         {
23             if (!use[i] && (v == -1 || dist[i] < dist[v])) v = i;
24         }
25         if (v == -1) break;
26         use[v] = true;
27         for (int i = 1; i <= n; i++)
28         {
29             dist[i] = min(dist[i], dist[v] + town[v][i]);
30         }
31     }
32     return dist[n];
33
34 }
35 int main()
36 {
37     freopen("in.txt", "r", stdin);
38     scanf("%d%d", &n, &m);
39     for (int i = 1; i <= n; i++)
40     {
41         for (int j = 1; j <= n; j++)
42         {
43             rail[i][j] = INF;
44             road[i][j] = 1;
45         }
46     }
47     for (int i = 0; i < m; i++)
48     {
49         int x, y;
50         scanf("%d%d", &x, &y);
51         rail[x][y] = 1;
52         rail[y][x] = 1;
53         road[x][y] = INF;
54         road[y][x] = INF;
55     }
56     int ans = 0;
57     if (rail[1][n] == INF || rail[n][1] == INF) ans = dijkstra(rail);
58     else ans = dijkstra(road);
59     if (ans == INF) printf("-1\n");
60     else printf("%d\n",ans);
61 }
时间: 2024-10-25 05:50:24

CodeForces - 601A The Two Routes的相关文章

ACM学习历程—CodeForces 601A The Two Routes(最短路)

题目链接:http://codeforces.com/problemset/problem/601/A 题目大意是有铁路和陆路两种路,而且两种方式走的交通工具不能在中途相遇. 此外,有铁路的地方肯定没有陆路. 这种情况下就会有一个结论,就是至少有一种交通可以直接1到n. 这样只需要对另一种跑一个最短路就OK了. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath&

[ An Ac a Day ^_^ ] CodeForces 601A The Two Routes 最短路

14号就ccpc全国赛的全国赛了 而且也快东北赛的选拔赛了 现在队伍实力实在不行 参加了也是边缘化的队伍 虽然有新生保护的设置 但实话说 机会还是不大 所以不如趁现在开始好好努力 明年也许还有机会 An Ac a Day ( of course not keep a girl away ^_^ ) 题意呢 一个人开火车 一个人开大巴 火车走铁路 大巴走公路 现在有n个城镇 每两个城镇之间都有路 其中m条铁路 其他的都是公路 要求两个人都从1开始走 途中不相遇 问最快要多久 题面比较诡异 两个人

The Two Routes CodeForces - 601A(水最短路)

一个完全图 1和n肯定有一条路  不是公路就是铁路  另= 另一个跑遍最短路即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; const int maxn = 100100, INF = 0x7fffffff; int head[maxn], cnt, n, m; int vis[maxn], d[maxn]; bool w[500][500]; struct n

Codeforces 601A

#include <bits/stdc++.h> using namespace std; #define maxn 411 #define INF 11111 int a1[maxn][maxn], a2[maxn][maxn]; int n, m; int d[maxn]; bool vis[maxn]; int dij (int a[maxn][maxn]) { for (int i = 1; i <= n; i++) { d[i] = INF; vis[i] = 0; } d[1

Codeforces Round #425 (Div. 2) Problem D Misha, Grisha and Underground (Codeforces 832D) - 树链剖分 - 树状数组

Misha and Grisha are funny boys, so they like to use new underground. The underground has n stations connected with n - 1 routes so that each route connects two stations, and it is possible to reach every station from any other. The boys decided to h

codeforces 的20道C题

A - Warrior and Archer CodeForces - 595C n  偶数  然后n个数字 A B 轮流取一个 A让差变小B让差变大 直到最后2 个   求的是最小剩下的差 最后剩下的 L R  相距 n/2    求一下最小的就行 #include <iostream> #include <cstdio> #include <cmath> #include <map> #include <algorithm> #include

Codeforces 327E Axis Walking (状压dp lowbit优化)

E. Axis Walking time limit per test:3 seconds memory limit per test:512 megabytes Iahub wants to meet his girlfriend Iahubina. They both live in Ox axis (the horizontal axis). Iahub lives at point 0 and Iahubina at point d. Iahub has n positive integ

Codeforces Beta Round #29 (Div. 2, Codeforces format) C. Mail Stamps 离散化拓扑排序

C. Mail Stamps Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/29/C Description One day Bob got a letter in an envelope. Bob knows that when Berland's post officers send a letter directly from city «A» to city «B

【codeforces 718E】E. Matvey&#39;s Birthday

题目大意&链接: http://codeforces.com/problemset/problem/718/E 给一个长为n(n<=100 000)的只包含‘a’~‘h’8个字符的字符串s.两个位置i,j(i!=j)存在一条边,当且仅当|i-j|==1或s[i]==s[j].求这个无向图的直径,以及直径数量. 题解:  命题1:任意位置之间距离不会大于15. 证明:对于任意两个位置i,j之间,其所经过每种字符不会超过2个(因为相同字符会连边),所以i,j经过节点至多为16,也就意味着边数至多