Codeforces 954 D Fight Against Traffic】的更多相关文章

Discription Little town Nsk consists of n junctions connected by m bidirectional roads. Each road connects two distinct junctions and no two roads connect the same pair of junctions. It is possible to get from any junction to any other junction by th…
题目链接: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>…
CF954D Fight Against Traffic 题意描述: 给你一张无向图,一共有n个点(2 <= n <= 1000),由m条边连接起来(1 <= m <= 10000),现在要在任意一对没有连边的点之间连上一条边,并且保证s到t之间的最短路径长度不变(最短路径长度表示s到t最少经过的边的数量)(1 <= s,t <= n , s≠t),请你求出一共有多少条这样的边. 被水题成功报复... code: #include <iostream> #i…
http://codeforces.com/problemset/problem/954/E 式子变成Σ xi*(ti-T)=0 sum0表示>=T的ai*ti之和 sum1表示<T的ai*ti之和 那么如果sum0<sum1,所有ti>=T的ai全加上 那么现在的Σ xi*(ti-T)>=0 考虑用ti<T的来使这个式子变成0,还要让Σ xi 最大 显然是选的ti与T的差距越小 ,xi可以用的越多 将ti从大到小排序后,以此选用,直到式子变成0 sum1<sum…
http://codeforces.com/problemset/problem/954/G 二分答案 检验的时候,从前往后枚举,如果发现某个位置的防御力<二分的值,那么新加的位置肯定是越靠后越好 差分即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 typedef long…
题目链接 http://codeforces.com/contest/954/problem/D 题目大意 n m s t 分别为点的个数, 边的个数,以及两个特殊的点 要求s与t间的距离在新增一条边下不变 基本思路 用dj算法由s 到 t两个点分别进行一次计算 得出每个点到s与t的最短值 遍历计算每两个没建立联系的边建立联系后,s与t的距离,并与初始时距离比较 若不变则记录(s与t的值必定为新建经由新建这条边的数值或原始值中最小一个) #include <stdio.h> #include…
题目链接:http://codeforces.com/contest/954/problem/D 题意 给出n个顶点,m条边,一个起点编号s,一个终点编号t 现准备在这n个顶点中多加一条边,使得st之间距离不变 问加边的方案数是多少 思路 想了半天才出思路,头一次打比赛时通过图论的题,挺高兴 因为是加一条边,所以我们可以考虑把这个新边的两端点进行更新 现用两个dist,一个是从起点开始的单源最短路dist[0],一个是从终点开始的单源最短路dist[1] 对于一个新边的两端点ab,我们只用判断是…
题目链接: A. Fight the Monster time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output A monster is attacking the Cyberland! Master Yang, a braver, is going to beat the monster. Yang and the monster ea…
Description 题目链接 Solution 从起点和终点分别做一次最短路并记录结果 枚举每一条可能的边判断 Code #include <cstdio> #include <algorithm> #include <queue> #include <cstring> #define N 1010 using namespace std; struct info{int to,nex;}e[N*2]; int n,m,s,t,tot,head[N],d…
A B C D 给你一个联通图 给定S,T 要求你加一条边使得ST的最短距离不会减少 问你有多少种方法 因为N<=1000 所以N^2枚举边数 迪杰斯特拉两次 求出Sdis 和 Tdis 如果dis[i]+dis[j]+1>=distance(s,t)&&dis[j]+dis[i]+1>=distance(i,j)就为一条要求边 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) me…