ZOJ-3318
Time Limit: 1 Second Memory Limit: 32768 KB
There are n cities in the dream country. Let's use integers from 1 to n to denote the cities. There are some roads between cities. To some strange, all the roads are bidirectional and the roads change from time to time. You have m maps of the country of different time. You are going to the dream country soon and you want to start your journey at city s and finish it at city t. Though you cannot predict the condition when you get there, you think it is useful to study the maps carefully. After studying the maps, you find that all the roads in all maps have the same length and there is an s-t path in each map. You want to choose an s-t path in each map and the paths are relatively short. Further more you don't want too many changes in the paths.
Formally suppose you have chosen an s-t path in each map, namely P1, P2,...Pm. Let's define a path's length to be simply the number of edges in it and use LEN to denote the total length of all the paths. Let's define a function as follow: CHANGE(P1, P2,...Pm) is the number of indices i (0 < i < m) for which Pi != Pi+1. Let's define the cost function as follow: COST(P1, P2,...Pm) = LEN + CHANGE(P1, P2,...Pm). You are supposed to find the minimum cost.
Input
There are multiple test cases. The first line of input is an integer T (0 < T < 205) indicating the number of test cases. Then T test cases follow. The first line of each test case is 4 integers n, m, s, t (1 < n, m <= 30, 0 < s, t <= n, s != t). Then there are m map descriptions. The first line of each map description is an integer R, the number of roads in the map (0 < R <= n * (n - 1) / 2). Each of the next R lines contains two integers a, b, the two cities that road connects( 0 < a, b <= n, a != b). You can assume that for each test case there is an s-t path in each map.
Output
For each test case, output in a line the minimum cost defined above.
Sample Input
2
3 3 2 3
2
1 2
3 1
3
1 2
2 3
3 2
2
2 1
2 3
4 2 1 4
3
1 2
2 3
3 4
3
1 2
2 3
3 4
Sample Output
5
6
Hint
Test case 1: three paths are 2-1-3, 2-3, 2-3.
Test case 2: both paths are 1-2-3-4.
Author: CAO, Peng
Source: The 10th Zhejiang University Programming Contest
Submit
#include <iostream>
#include <stdio.h>
#include<cmath>
#include<algorithm>
#include<string.h>
#include<queue>
#include<set>
#define maxn 40
using namespace std;
int dist[maxn];
int mark[maxn][maxn];
int Edge[maxn][maxn];
int mmap[maxn][maxn][maxn];
int dp[maxn];
int n,m,s,t,flag;
int bfs()
{
memset(dist,0x3f,sizeof(dist));
flag = dist[0];
dist[s] = 0;
queue<int>que;
while(!que.empty()) que.pop();
que.push(s);
while(!que.empty())
{
int tmp = que.front();
que.pop();
for(int i=1;i<=n;i++)
{
if(Edge[tmp][i] == 1 && dist[i] > dist[tmp] + 1)
{
dist[i] = dist[tmp] + 1;
que.push(i);
}
}
}
return dist[t];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLINE_JUDGE
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d %d",&n,&m,&s,&t);
int R,u,v;
memset(mmap,0,sizeof(mmap));
memset(mark,0,sizeof(mark));
memset(dp,0,sizeof(dp));
for(int i=0; i<m; i++)
{
scanf("%d",&R);
for(int j=0; j<R; j++)
{
scanf("%d %d",&u,&v);
mmap[i][u][v] = 1;
mmap[i][v][u] = 1;
}
}
for(int i=0; i<m; i++)
{
memset(Edge,1,sizeof(Edge));
for(int j=i; j<m; j++)
{
for(int k=1; k<=n; k++)
{
for(int t= 1; t <=n; t++)
{
Edge[k][t] = Edge[k][t] & mmap[j][k][t];
}
}
mark[i][j] = bfs();
}
}
dp[0] = mark[0][0];
for(int i=1;i<=m;i++)
{
if(mark[0][i] != flag) dp[i] = mark[0][i] *(i+1);
else dp[i] = flag;
for(int j=0;j<i;j++)
{
if(mark[j+1][i] != flag)
dp[i] = min(dp[i] ,dp[j] + mark[j+1][i]*(i-j) + 1);
}
}
printf("%d\n",dp[m-1]);
}
return 0;
}
ZOJ-3318的更多相关文章
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
- ZOJ Problem Set - 1001 A + B Problem
ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...
- zoj 1788 Quad Trees
zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...
- ZOJ 1958. Friends
题目链接: ZOJ 1958. Friends 题目简介: (1)题目中的集合由 A-Z 的大写字母组成,例如 "{ABC}" 的字符串表示 A,B,C 组成的集合. (2)用运算 ...
- ZOJ
某年浙大研究生考试的题目. 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC, ...
随机推荐
- BZOJ3781:小B的询问——题解
https://www.luogu.org/problemnew/show/2709 http://www.lydsy.com/JudgeOnline/problem.php?id=3781 题目描述 ...
- 爆款PHP面试题
$a = 3; $b = 6; if ($a = 4 || $b = 4) { $a++; $b++; } echo $a; //输出 1 echo $b; //输出 7 逛鸟哥博客,看评论区有个新手 ...
- c#中文件流的读写
文件流读入:第一static void Main(string[] args) { //C#文件流写文件,默认追加FileMode.Append string msg = "okffffff ...
- BZOJ1832 聚会
Description:Y岛风景美丽宜人,气候温和,物产丰富.Y岛上有N个城市,有N-1条城市间的道路连接着它们.每一条道路都连接某两个城市.幸运的是,小可可通过这些道路可以走遍Y岛的所有城市.神奇的 ...
- 【套题】qbxt国庆刷题班D2
D2 今天的题感觉还是好妙的 T1 传送门 Description 现在有一张\(n\)个节点\(m\)条边的无向连通图\(G=(V,E)\),满足这张图中不存在长度大于等于3的环且图中没有重边和自环 ...
- mysql的concat用法
问题提出:mybatis的mapper文件中的模糊查询: mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT( ...
- 牛客多校第五场-D-inv
链接:https://www.nowcoder.com/acm/contest/143/D来源:牛客网 题目描述 Kanade has an even number n and a permutati ...
- CodeBlocks wrong
codeblocks官网 Q1. 中文乱码 系统是win,用的是codeblocks编辑器,指定的原文件编码是UTF-8 编译后运行,发现中文在控制台里显示全是乱码 A1: 对此有解决办法,通过给g+ ...
- LightOJ 1013 - Love Calculator LCS
题意:找一个串使给出的两个串都是它的子串,要求最短,求出最短长度,以及种类数. 思路:可以想到,当两个子串a,b拥有最长的公共子串为LCS时,那么可以求出的最短的串为lena+lenb-LCS. 那么 ...
- MyBatis框架的使用及源码分析(六) MapperRegistry
我们先Mapper接口的调用方式,见<MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用>的示例: public void findUserById() { Sql ...