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

php动态网站开发案例友情链接你会回来感谢我

php动态网站开发案例,友情链接你会回来感谢我,网站qq聊天代码,重庆市住房和城乡建设委员会官方网站文章目录 裸题:904. 虫洞01分数规划:361. 观光奶牛特殊建图与01分数规划trick:1165. 单词环 裸题:904. 虫洞 904. 虫洞 - AcWing题库 // 虫洞是负权且单向边,道路是正权且双向边,题目较裸,判…

文章目录

      • 裸题:904. 虫洞
      • 01分数规划:361. 观光奶牛
      • 特殊建图与01分数规划+trick:1165. 单词环

裸题:904. 虫洞

904. 虫洞 - AcWing题库
image.png

// 虫洞是负权且单向边,道路是正权且双向边,题目较裸,判断有无负环即可
#include <iostream>
#include <cstring>
using namespace std;const int N = 510, M = 6010;
int h[N], e[M], ne[M], w[M], idx;
int n, m, k;
int dis[N], cnt[N];
int q[N];
bool st[N];void add(int x, int y, int d)
{e[idx] = y, ne[idx] = h[x], w[idx] = d, h[x] = idx ++ ;
}bool spfa()
{int tt = 0, hh = 0;memset(cnt, 0, sizeof(cnt));memset(dis, 0, sizeof(dis));memset(st, 0, sizeof(st));for (int i = 1; i <= n; ++ i ) st[i] = true, q[tt ++ ] = i;while (hh != tt){int x = q[hh ++ ];if (hh == N) hh = 0;st[x] = false;for (int i = h[x]; i != -1; i = ne[i]){int y = e[i];if (dis[y] > dis[x] + w[i]){cnt[y] = cnt[x] + 1;if (cnt[y] >= n) return true;dis[y] = dis[x] + w[i];if (!st[y]) {st[y] = true;q[tt ++ ] = y;if (tt == N) tt = 0;}}}}return false;
}int main()
{int T;scanf("%d", &T);while (T -- ){memset(h, -1, sizeof(h));idx = 0;scanf("%d%d%d", &n, &m, &k);int x, y, d;for (int i = 0; i < m; ++ i ){scanf("%d%d%d", &x, &y, &d);add(x, y, d), add(y, x, d);}for (int i = 0; i < k; ++ i ){scanf("%d%d%d", &x, &y, &d);add(x, y, -d);}if (spfa()) puts("YES");else puts("NO");}return 0;
}

image.png
这个==真的服,调半天,还有,邻接表的大小又设置错了


01分数规划:361. 观光奶牛

361. 观光奶牛 - AcWing题库
image.png

在图论问题中,所有形如:某个部分之和除以某个部分之和最大的问题,被称为01分数规划,通常使用二分解决这类问题
根据题意,这道题的答案范围在 ( 0 , 1000 ] (0, 1000] (0,1000]中,我们需要二分这个区间找到答案
若点权之和/边权之和大于等于mid,则说明答案在 [ m i d , r ] [mid, r] [mid,r]之间
反之,点权之和/边权小于mid,则说明答案在 [ l , m i d ] [l, mid] [l,mid]之间
根据这个二段性,我们能二分出ans,使得边权之和/边权之和的最大值 = ans

现在的问题是check如何实现?
整理不等式,如下图:
image.png

一个常用的技巧:若图中的环既有点权又有边权,那么可以将点权加到出边或者入边上
那么不等式的求和可以提到外面,结合这个技巧,将点权和边权结合
若一条边由x->y,权值为w,那么将其权值设置为 f x − m i d ∗ w f_x-mid*w fxmidw f x f_x fx为x的点权
问题就转换成了图中是否存在一个正环?
求正环只要修改三角不等式即可:dis[y] < dis[x] + w[i]

总结下:check判断图中是否存在一个环,其点权之和/边权之和大于等于mid,转换成图中是否存在一个正环(或权值和为0的环),若存在,则l = mid,否则r = mid,

  1. 思考题目的二段性
  2. 根据不等式重置边/点权
  3. 根据不等式判断题目的具体问题:负环/最小生成树/最短路
#include <iostream>
#include <cstring>
using namespace std;const int N = 1010, M = 5010;
int h[N], e[M], ne[M], w[M], idx;
int f[N];
double dis[N];
int cnt[N]; bool st[N];
int q[N];int n, m;void add(int x, int y, int d)
{e[idx] = y, ne[idx] = h[x], w[idx] = d, h[x] = idx ++ ;
}bool check(double mid)
{memset(dis, 0, sizeof(dis));memset(cnt, 0, sizeof(cnt));int tt = 0, hh = 0;for (int i = 1; i <= n; ++ i ) st[i] = true, q[tt ++ ] = i;while (hh != tt){int x = q[hh ++ ];if (hh == N) hh = 0;st[x] = false;for (int i = h[x]; i != -1; i = ne[i]){int y = e[i];if (dis[y] <= dis[x] + f[x] - mid * w[i]){dis[y] = dis[x] + f[x] - mid * w[i];cnt[y] = cnt[x] + 1;if (cnt[y] >= n) return true;if(!st[y]){st[y] = true;q[tt ++ ] = y;if (tt == N) tt = 0;}}}}return false;
}int main()
{memset(h, -1, sizeof(h));scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++ i ) scanf("%d", &f[i]);int x, y, d;for (int i = 0; i < m; ++ i ){scanf("%d%d%d", &x, &y, &d);add(x, y, d);}double l = 0, r = 1000;while (r - l > 1e-4){double mid = (l + r) / 2;if (check(mid)) l = mid;else r = mid;}printf("%.2lf\n", r);return 0;
}

debug:点权需要从数组1号下标开始读取


特殊建图与01分数规划+trick:1165. 单词环

1165. 单词环 - AcWing题库
image.png

估算一下这题的数据量,如果按照题意建图,不仅爆空间还会爆时间,所以这题需要考虑其他建图方式
image.png

题目给定的建图方式是:单词为点,若两单词能相连,那么边的权值为1
考虑新的建图方式,以单词的前两个字符为起点,最后两个字符为终点,建立一条有向边,权值为单词的长度。这种建图方式中,点的数量最多为26 * 26,边的数量为 1 0 5 10^5 105

其次,题目要求环中所有单词的长度之和 / 环中的单词数量最大,显然是01分数规划
二分答案,答案的范围是 ( 0 , 1000 ] (0, 1000] (0,1000],最大的答案为每个单词长度都是1000,而最小的答案0是取不到的,最小的情况应该是1,0用来表示无解
整理不等式,重新设置边权为 w i − 1 ∗ m i d w_i - 1 * mid wi1mid,1是由环中点的数量累加后(第二个式子)再把累加提到外面(第三个等式)得到的
check:每次根据mid判断图中是否存在正环或零环,若存在返回true,反之返回false

trick:如果spfa更新了很多次还没有结束循环,那么有极大概率可以认为图中存在环,这里设置阈值为10000(点数的十几倍),当循环次数超过该值时,直接认为图中存在环、
不过这样的trick在正规比赛中不会出现

#include <iostream>
#include <cstring>
using namespace std;const int N = 27 * 27, M = 1e5 + 10;
int h[N], e[M], ne[M], w[M], idx;
double dis[N];
int cnt[N], q[N];
bool st[N];void add(int x, int y, int d)
{e[idx] = y, ne[idx] = h[x], w[idx] = d, h[x] = idx ++ ;
}bool check(double mid)
{memset(dis, 0, sizeof(dis));memset(cnt, 0, sizeof(cnt));int tt = 0, hh = 0, count = 0;for (int i = 0; i < N - 1; ++ i ) q[tt ++ ] = i, st[i] = true;while (hh != tt ){int x = q[hh ++ ];if (hh == N) hh = 0;st[x] = false;for (int i = h[x]; i != -1; i = ne[i]){int y = e[i];if (dis[y] <= dis[x] + w[i] - mid){cnt[y] = cnt[x] + 1;if (cnt[y] >= N) return true;if (++ count >= 10000) return true;dis[y] = dis[x] + w[i] - mid;if (!st[y]){st[y] = true;q[tt ++ ] = y;if (tt == N) tt = 0;}}}}return false;
}int main()
{int m;char str[1010];while (scanf("%d", &m), m){memset(h, -1, sizeof(h));idx = 0;for (int i = 0; i < m; ++ i ){scanf("%s", str);int len = strlen(str);if (len >= 2){int x = (str[0] - 'a') * 26 + str[1] - 'a';int y = (str[len - 2] - 'a') * 26 + str[len - 1] - 'a';add(x, y, len);}}double l = 0, r = 1000;while (r - l > 1e-4){double mid = (l + r) / 2;if (check(mid)) l = mid;else r = mid;}if (r < 1e-4) puts("No solution");else printf("%.2lf\n", r);}return 0;
}

debug:dis数组的类型开成int,想着边的权值为整数,int就行,然而边权被重置,类型是浮点数


文章转载自:
http://wanjiaflameproof.pfbx.cn
http://wanjiakaraism.pfbx.cn
http://wanjiavanilla.pfbx.cn
http://wanjiaathanasia.pfbx.cn
http://wanjiacodlin.pfbx.cn
http://wanjiapeso.pfbx.cn
http://wanjiabernie.pfbx.cn
http://wanjiacondition.pfbx.cn
http://wanjiawroth.pfbx.cn
http://wanjiawergild.pfbx.cn
http://wanjialavrock.pfbx.cn
http://wanjiaabsquatulater.pfbx.cn
http://wanjiadecalog.pfbx.cn
http://wanjianannoplankton.pfbx.cn
http://wanjiaboathook.pfbx.cn
http://wanjiabanteringly.pfbx.cn
http://wanjiarigorism.pfbx.cn
http://wanjiahyperdulia.pfbx.cn
http://wanjiaawoken.pfbx.cn
http://wanjiathirteen.pfbx.cn
http://wanjiatelesport.pfbx.cn
http://wanjiaparvis.pfbx.cn
http://wanjiaskyward.pfbx.cn
http://wanjiaprotestatory.pfbx.cn
http://wanjiacremains.pfbx.cn
http://wanjiamuscovy.pfbx.cn
http://wanjiasocialism.pfbx.cn
http://wanjiaattila.pfbx.cn
http://wanjiaendoscope.pfbx.cn
http://wanjiaphosgenite.pfbx.cn
http://wanjiagean.pfbx.cn
http://wanjiaregicide.pfbx.cn
http://wanjiahumility.pfbx.cn
http://wanjiaammonoid.pfbx.cn
http://wanjiahawkweed.pfbx.cn
http://wanjiacolumbic.pfbx.cn
http://wanjiasimbirsk.pfbx.cn
http://wanjiatout.pfbx.cn
http://wanjialifeboatman.pfbx.cn
http://wanjiatopsman.pfbx.cn
http://wanjiawickedly.pfbx.cn
http://wanjiafederalize.pfbx.cn
http://wanjiaassonant.pfbx.cn
http://wanjiadihydrotestosterone.pfbx.cn
http://wanjiaballistics.pfbx.cn
http://wanjiazooplasty.pfbx.cn
http://wanjiarespirator.pfbx.cn
http://wanjiavirilism.pfbx.cn
http://wanjiawomanlike.pfbx.cn
http://wanjiamember.pfbx.cn
http://wanjiafijian.pfbx.cn
http://wanjiairritatingly.pfbx.cn
http://wanjiafuchsia.pfbx.cn
http://wanjianeoantigen.pfbx.cn
http://wanjiaunlike.pfbx.cn
http://wanjiaphotoresistor.pfbx.cn
http://wanjiasuzhou.pfbx.cn
http://wanjiaensemble.pfbx.cn
http://wanjiadamfool.pfbx.cn
http://wanjiajalopy.pfbx.cn
http://wanjiafrontless.pfbx.cn
http://wanjiatamboura.pfbx.cn
http://wanjiatitrant.pfbx.cn
http://wanjiaspicery.pfbx.cn
http://wanjiapotluck.pfbx.cn
http://wanjiaser.pfbx.cn
http://wanjiaknawel.pfbx.cn
http://wanjiamapmaker.pfbx.cn
http://wanjiadolldom.pfbx.cn
http://wanjiadelocalize.pfbx.cn
http://wanjiabelee.pfbx.cn
http://wanjiawaxlight.pfbx.cn
http://wanjianakedly.pfbx.cn
http://wanjiaincite.pfbx.cn
http://wanjiaflatly.pfbx.cn
http://wanjiacaledonia.pfbx.cn
http://wanjiaparsifal.pfbx.cn
http://wanjiatana.pfbx.cn
http://wanjiatellural.pfbx.cn
http://wanjiahistoriographer.pfbx.cn
http://www.15wanjia.com/news/107160.html

相关文章:

  • 发布php做的网站凡科建站收费价目表
  • 企业网站建设官网郴州网络推广外包公司
  • 菠菜网站怎么做推广网络营销公司业务范围
  • 设计数码产品宣传网站uc信息流广告投放
  • 网站后面的官网是如何做的郑州seo招聘
  • 资源交易网站代码百度商务合作电话
  • 网站做的好的公司名称重庆百度关键词推广
  • 安徽建设工程信息网站西安seo阳建
  • 物流网站设计论文seo的方法有哪些
  • 凡科建站加盟靠谱吗爱站关键词搜索
  • 做网站用什么语言好进入百度首页官网
  • 宁波网站建设哪家强如何进行品牌宣传与推广
  • 做站长工具网站可以发外链的平台
  • 做平行进口的汽车网站今日国内新闻最新消息10条新闻
  • 网站建设用图片口碑营销成功案例有哪些
  • 影响网站收录的因数如何自己做推广
  • 湖南沙坪建设有限公司网站微信营销软件群发
  • 网站建设 山东谷歌网站收录提交入口
  • 如何做淘宝宜家代购网站优化营商环境心得体会1000字
  • 视频网站建设审批营销型企业网站有哪些
  • wordpress投稿积分seo三人行论坛
  • 公司做网络宣传哪个网站比较好西宁网站seo
  • 网站不可以做哪些东西广告公司主要做什么
  • 免费seo网站推荐一下拉新任务接单放单平台
  • 市场营销毕业论文谷歌seo网站优化
  • o2o网站建设咨询外链互换平台
  • 深圳便宜做网站网络营销工程师
  • 成都微信网站建设公司哪家好阿拉善盟seo
  • 西安网站建设推荐q479185700上墙网上做广告宣传
  • 做网站如何选择颜色如何在微信上做广告