题目链接:http://codeforces.com/contest/821/problem/D 题意:n*m地图,有k个位置是点亮的,有4个移动方向,每次可以移动到相邻的点亮位置,每次站在初始被点亮某个位置,暂时使某行或该某列全部点亮,花费为1,下一次使用时,上一次暂时点亮被熄灭 题解:显然只要知道如果两点相邻直接相连然后就是极限情况,什么情况之下是两点是连不到一起的.如果x轴与y轴的相差大于2是连不到一起的. 具体画一下图就知道了.然后就跑一遍dij+优先队列就行了或者spfa也行. #in…
Okabe and City 题解: 将行和列也视为一个点. 然后从普通的点走到行/列的点的话,就代表这行/列已经被点亮了. 然后将费用为0的点建上边. 注意讨论(n,m)非亮的情况下. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w"…
Link 题意:给出$n*m$大小的地图,已有$k$盏灯亮,人从左上角出发,右下角结束,期间必须走路灯点亮的地方,他可以在任意时刻消耗一枚硬币点亮一行或一列灯,他最多同时点亮一行或一列灯,要想点亮别的行列时,原先灯的状态将还原. 思路:看似很繁琐的题目,其实重点在于每次只能进行一次操作,那么只需要边走边考虑下一步到达的点即可.由于可任选行列,那么意味着下一个点只要和当前位置x和y坐标之差都不超过2,那么都能到达,在此情况上,坐标差之和为1说明相邻不需要消耗硬币,其余情况均消耗一枚硬币.跑个最短路…
题目链接: http://codeforces.com/problemset/problem/173/B 题意: 给你一个n*m的地图,现在有一束激光从左上角往左边射出,每遇到‘#’,你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个‘#’往四个方向射出才能使关系在n行往右边射出. 题解: 以行和列建二分图,如果str[i][j]=='#',则从i节点到j节点建一条双向边,权值都为1.然后对二分图跑一遍最短路. 代码: #include<iostream> #include<…
D. Legacy time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output Rick and his co-workers have made a new radioactive formula and a lot of bad guys are after them. So Rick wants to give his legacy…
题目链接:http://codeforces.com/problemset/problem/601/A 题目大意是有铁路和陆路两种路,而且两种方式走的交通工具不能在中途相遇. 此外,有铁路的地方肯定没有陆路. 这种情况下就会有一个结论,就是至少有一种交通可以直接1到n. 这样只需要对另一种跑一个最短路就OK了. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath&…
Wow! Such City!    题意:题面很难理解,幸亏给出了提示,敲了一发板子过了.给出x数组y数组和z数组的求法,并给出x.y的前几项,然后直接利用所给条件构造出z数组再构造出C数组即可,Cij表示i点到j点的路长,然后再跑个dij就可以求出0点到其他点的最短路,然后将这些最短路对M取余求所有取余值的最小值.需要注意的是Cij=Z(i*n+j),也就是X.Y.Z数组都要开到(n-1)*n+n.理解了其实也就是水题了,题意这样东扯西扯真是迷.. const int N=1e6+1000;…
[题目链接]:http://codeforces.com/problemset/problem/821/E [题意] 一开始位于(0,0)的位置; 然后你每次可以往右上,右,右下3走一步; (x+1,y+1),(x+1,y),(x+1,y-1) 然后有n条横线,限制你在横线与x轴之间; 问你从(0,0)到(k,0)有多少种行走方案; k可以很大; 保证横线是连续的,即一条横线完,马上接另外一条横线; [题解] 如果不考虑那么大的横坐标的话; 用最简单的DP 设f[i][j]表示到(i,j)这个点…
A. The Two Routes time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output In Absurdistan, there are n towns (numbered 1 through n) and m bidirectional railways. There is also an absurdly simple ro…
题目链接:Fight Against Traffic 题意:有n个点个m条双向边,现在给出两个点S和T并要增加一条边,问增加一条边且S和T之间距离不变短的情况有几种? 题解:首先dfs求一下S到其他点和T到其他点的最短路(好久不写有点手生@.@),然后遍历所有的建边的情况,假设在i和j两个点之间建边则要满足 ds[i] + 1 + dt[j] > ds[T] && ds[j] + 1 + dt[i] > ds[T]. #include<bits/stdc++.h>…