当前位置: 首页 > news >正文

外贸网站推广与优化/厦门seo优

外贸网站推广与优化,厦门seo优,webgl网站建设,如何看网站是谁做的一、题目链接 http://codeforces.com/gym/101490 二、题面 三、题意 给你一个图,n个点,m条边,一个x,从顶点1走到顶点n。假设从顶点1走到顶点n的最短路为d,x代表你可以选择的路径的长度范围:[d, d * (1 x%)…

一、题目链接

  http://codeforces.com/gym/101490

二、题面

  

三、题意

  给你一个图,n个点,m条边,一个x,从顶点1走到顶点n。假设从顶点1走到顶点n的最短路为d,x代表你可以选择的路径的长度范围:[d, d * (1 + x%)]。让你求出在所有长度在此区间内的路径,路径上最大的边的最小值。如图所示:

 

  从顶点1到顶点9的最短距离为16。所以,可选的路径范围是:[16, 18.4]。可以发现,1->4->7->8->9这条路径的长度为18,是在此区间内的,而且这条路径上的边最大值为5。而另一条有效路径是1->9,边最大值是16。所以,答案是5。

四、思路

  先跑一遍最短路算法,得到从顶点1到顶点n的最短路径。然后,二分最大边权,把大于枚举值mid的边全部删掉,再跑最短路,如果从1到n的最短路在[d, d * (1 + x%)]范围内,说明枚举的mid是有效的。最后输出枚举的最小的最大值即可。

  删边怎么删呢?千万别用set或者vector之类的容器去模拟删除,这样复杂度会大很多。快速的方法是:使用两个图,一个是原图,另一个是二分最大边权的图,每次枚举一个mid时,都用原图来筛选,把大于mid的边直接过滤掉就OK了。

  为什么这样是正确的呢?因为答案是满足单调性的。(现在我只能这么写。有些感觉上的东西实在是表达不出来呀。)

五、源代码

  

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, LL> PLL;//first:邻接点,second:和邻接点之间的边权。
const int MAXN = 1e4 + 10;
vector<PLL> g[2][MAXN];
int n, m, x;
double minl, maxl;
typedef pair<LL, int> P;//跑dijstra算法必备的。
LL d[MAXN];LL djst(int s, int which) {priority_queue<P, vector<P>, greater<P> > que;memset(d, 0x3f, sizeof(d));d[s] = 0;que.push(P(0, s));while(!que.empty()) {P p = que.top();que.pop();int v = p.second;if(d[v] < p.first)continue;for(int i = 0, sz = g[which][v].size(); i < sz; ++i) {PLL pll = g[which][v][i];if(d[pll.first] > d[v] + pll.second) {d[pll.first] = d[v] + pll.second;que.push(P(d[pll.first], pll.first));}}}return d[n];
}bool test(LL mid){for(int i = 0;i < MAXN;++i)g[1][i].clear();for(int i = 1;i <= n;++i){for(int j = 0, sz = g[0][i].size();j < sz;++j){PLL pll = g[0][i][j];if(pll.second <= mid)g[1][i].push_back(pll);}}LL dis = djst(1, 1);double ddis = (double)dis;if(ddis > minl && ddis < maxl)return true;if(fabs(ddis - minl) < 1e-10 || fabs(ddis - maxl) < 1e-10)return true;return false;
}int main() {
#ifndef ONLINE_JUDGEfreopen("Einput.txt", "r", stdin);
#endif // ONLINE_JUDGEint a, b;LL c;while(~scanf("%d%d%d", &n, &m, &x)) {for(int i = 0; i < MAXN; ++i)g[0][i].clear();for(int i = 1; i <= m; ++i) {scanf("%d%d%lld", &a, &b, &c);g[0][a].push_back(make_pair(b, c));g[0][b].push_back(make_pair(a, c));}minl = (double)djst(1, 0);maxl = minl * (1.0 + x * 1.0 / 100.0);LL low = -1, high = 1LL << 60, mid;while(low < high - 1){mid = (low + high) / 2;if(test(mid))high = mid;else low = mid;}printf("%lld\n", high);}return 0;
}

 经验:long long类型的数值做数组下标也是没问题的。这样,在需要使用long long数据类型的题目中,通通使用long long数据类型,包括for循环,这样可以省去各种麻烦的类型转换操作。尤其是使用C/C++语言,编译器没有自动类型转换的情况下。

转载于:https://www.cnblogs.com/fuzhihong0917/p/7672399.html

http://www.jmfq.cn/news/4832641.html

相关文章:

  • 中国城镇建设网站/电子商务网站推广
  • 公司做网站找谁/百度下载安装app
  • wordpress使用邮箱/关键词优化包含
  • 成都网页设计培训班/站长工具seo综合查询关键词
  • 做海报的网站推荐/新公司怎么做网络推广
  • 网站开发的基本流程和步骤/大数据智能营销
  • dedecms 网站还原/上海百度推广公司排名
  • 仁怀网站建设不好出手/百度宁波营销中心
  • 网站建设阶段性工作重点/网站推广优化网址
  • 国外做测评的网站有哪些/公司网站怎么做
  • 无锡网站建设哪家专业/打开百度搜索
  • 收费网站必须备案吗/企业推广平台排行榜
  • 金水区网站建设/seo推广价格
  • 网站建设绵阳辉煌电商/杭州seo搜索引擎优化公司
  • 天津网站建设推广/免费建网站最新视频教程
  • 武汉网站建设/永久免费自助建站软件
  • 南京市住宅建设总公司网站/免费的关键词优化工具
  • 河北手机版建站系统哪个好/网站推广优化设计方案
  • 建设网站要求和注意事项/做网页设计一个月能挣多少
  • 网站备案和icp备案/线上推广有哪些渠道
  • 网络建设文章网站/腾讯云1元域名
  • 建筑招聘网站有哪些/马鞍山网站seo
  • 企业开发网站公司/谷歌搜索引擎优化seo
  • 良品铺子网站建设目标/爱站工具下载
  • 给人做网站多少钱/品牌推广营销平台
  • 网站建设外贸/百度云app下载安装
  • 北京专业网站建设/开封网络推广哪家好
  • 首钢建设一公司网站/代发新闻稿最大平台
  • 网站开发中要做哪些东西/种子搜索神器 bt 下载
  • php可以自己做网站吗/seo公司优化排名