CF1204C Anna, Svyatoslav and Maps




题意

在给定的序列P中求一个子序列,使得在图中按照该子序列进行最短路径移动时可以完整经过原序列P

code

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 105
#define maxm 1000010
#define inf 0x3f3f3f3f
using namespace std ;
int n ,m , idx ;
char mp[maxn][maxn] ;
int G[maxn][maxn] , point[maxm] , ans[maxm] ;
int qu[maxm*2] ;
int head = 1 , tail = 0 ;
int main () {
    memset(G,0x3f,sizeof(G)) ;
    cin >> n ;
    for(int i = 1 ; i <= n ; i ++) {
        scanf("%s",mp[i]+1) ;
    }
    for(int i = 1 ; i <= n ; i ++) {
        for(int j = 1 ; j <= n ; j ++) {
            if(mp[i][j] == '1') {
                G[i][j] = 1 ;
            }
        }
        G[i][i] = 1 ;
    }
    for(int k = 1 ; k <= n ; k ++) {
        for(int i = 1 ; i <= n ; i ++) {
            for(int j = 1 ; j <= n ; j ++) {
                G[i][j] = min(G[i][j],G[i][k]+G[k][j]) ;
            }
        }
    }
    cin >> m ;
    for(int i = 1 ; i <= m ; i ++) {
        cin >> point[i] ;
    }
    int st = 1 , now = 2  ;
    while(now <= m) {
        int diss = now - st ;
        if(diss == G[point[st]][point[now]]) {
            if(head <= tail) {
                head ++ ;
            }
            qu[++tail] = now ;
            now ++ ;
        }else {
            ans[++idx] = point[st] ;
            if(head <= tail) {
                st = qu[head++] ;
            }
        }
    }
    ans[++idx] = point[st] ;
    if(ans[idx] != point[m]) {
        ans[++idx] = point[m] ;
    }
    cout << idx << endl ;
    for(int i = 1 ; i <= idx ; i ++) {
        cout << ans[i] << " " ;
    }
    return 0 ;
}

溜了溜了

原文地址:https://www.cnblogs.com/lyt020321/p/11391125.html

时间: 2024-10-30 20:45:04

CF1204C Anna, Svyatoslav and Maps的相关文章

[最短路,floyd] Codeforces 1204C Anna, Svyatoslav and Maps

题目:http://codeforces.com/contest/1204/problem/C C. Anna, Svyatoslav and Maps time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The main characters have been omitted to be short. You are give

Codeforces1204C. Anna, Svyatoslav and Maps (贪心 + Floyd)

题目链接:传送门 题目大意: 给出n<=100的有向图,和路径p,求p的最短子序列v,使得依次经过v中所有点的路径为p. 思路: 题意其实就是让我们求路径上的一些关键点v,对于所有的关键点:vi到vi+1的最短路的长度,等于vi到vi+1这两个点在序列p中的下标的差,且vi到vi+2的最短路的长度,小于vi到vi+2在序列p中的下标的差. 如果用dis[u][v] 表示:在题目给出的有向图中,从u出发到v的最短路径的长度.则: 1.p1和pm都是关键点. 2.假设u是之前的最后一个关键点,如果d

Codeforces Round #581 (Div. 2)

A.BowWow and the Timetable 题目连接 题目大意 给你一个以二进制方式来表示数字\(n\)的字符串,问\(4^k < n\)数字的个数. 解题思路 题目给的数字是以二进制的方式给的,那么结合二进制数字的特点,可以发现每个\(4^k\)用二进制表示最前面的那个1都是在奇数位置,那么如果给的字符串长度是偶数,直接除以2:如果是奇数的话,加1除以2,并且判断最高位1是否满足条件. AC代码 #include <bits/stdc++.h> using namespace

CF1204C

CF1204C-Anna, Svyatoslav and Maps 题意: 题目传送门 不想说了,阅读题. 解法: 先用floyd跑出各顶点间的最短路.把p(1)加入答案,然后沿着题目给的路径序列遍历,如果答案中的最后一个顶点到当前遍历到的顶点的最短距离,小于原序列中两点的距离和,则答案加上p(i-1),并且继续遍历路径,遍历完之后在最后加上p(m) CODE: #include<iostream> #include<cstdio> #include<cstring>

【BZOJ】1382: [Baltic2001]Mars Maps (线段树+扫描线)

1382: [Baltic2001]Mars Maps Time Limit: 5 Sec  Memory Limit: 64 MB Description 给出N个矩形,N<=10000.其坐标不超过10^9.求其面积并 Input 先给出一个数字N,代表有N个矩形. 接下来N行,每行四个数,代表矩形的坐标. Output 输出面积并 Sample Input 2 10 10 20 20 15 15 25 30 Sample Output 225 本以为是傻逼题,没想到不容易啊- 线段树+扫描

在Google Maps 上点击标签后显示说明

JS如下: (function() { ????window.onload = function() { ? ????????// Creating an object literal containing the properties ????????// you want to pass to the map ????????var options = { ????????????zoom: 3, ????????????center: new google.maps.LatLng(37.0

笔记:MyBatis Mapper XML文件详解 - Result Maps

Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. 事实上, 编写相似于对复杂语句联合映射这些等同的代码, 也许可以跨过上千行的代码. ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们 的关系,你已经看到简单映射语句的示例了,但没有明确的 resultMap.比如: <s

Win8.1应用开发之Bing Maps

这里介绍怎样进行Bing Maps的开发.首先我们须要在我们的程序中引入Bing Map的SDK.详细方法,这里推荐一个链接<win8>使用Bing地图.这样一个hello world便出来了.这里主要介绍一些主要的API.进行一些基础性的开发. 在整个开发中,给我感触最深的是.在网上资料稀少的情况下.查看研究Bing Map给出的API是最有效的方法(Map API). 或许API的凝视是模棱两可,但仅仅要我们去试.便能了解这些方法的功能. 假设遇到hello world不能显示地图,在C#

Exercise: Maps (单词统计)

A Tour of Go Exercise: Maps https://tour.golang.org/moretypes/23 WordCount (单词统计) 是一个很经典的小程序了,在很多编程入门教程中都会出现. 这道题比较简单,但也有一些知识点值得一提. 上面这个答案我是参考了网上别人写的.但在参考别人之前我也自己解题了,其中,唯一不同之处是这一句: m[word]++ 我本来写的是: _, ok := m[word] if ok { m[word]++ } else { m[word]