解题报告 『[USACO5.4]Canada Tour(线性动规)』

原题地址

此题让我知道了快读和取消同步后的cin貌似不能一起用?

算了,反正取消同步后的cin也挺快的。

 

代码实现如下:

#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (register int i = (a); i <= (b); i++)

const int maxm = 1e2 + 5;;

int n, v, ans = 1;
int dp[maxm][maxm];
bool vis[maxm][maxm];
string s, s1, s2;

map<string, int> map_city;

int MAX(int a, int b) {return a > b ? a : b;}

void write(int x) {
    if (x < 0) {
        putchar('-');
        x = -x;
    }
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> v;
    rep(i, 1, n) {
        cin >> s;
        map_city[s] = i;
    }
    rep(i, 1, v) {
        cin >> s1 >> s2;
        vis[map_city[s1]][map_city[s2]] = 1;
        vis[map_city[s2]][map_city[s1]] = 1;
    }
    dp[1][1] = 1;
    rep(i, 1, n - 1)
        rep(j, i + 1, n)//i,j之后会对换,所以j就直接从i + 1开始. 
            rep(k, 1, j - 1)
                if (vis[j][k] && dp[i][k]) dp[i][j] = dp[j][i] = MAX(dp[i][j], dp[i][k] + 1);    
    rep(i, 1, n)
        if (vis[i][n]) ans = MAX(ans, dp[i][n]);
    write(ans);
    return 0;
}
View Code
posted @ 2019-05-05 11:00  雲裏霧裏沙  阅读(165)  评论(0编辑  收藏  举报