题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26586 题意:给一个图,每条边有一个权值.要你求选择一棵树,权值和为sum,然后在树上选择一条边权值为w,然后使得sum-2*w最小. 首先求一遍最小生成树,然后求出每两个点之间的最小瓶颈路,然后枚举边就行了.. //STATUS:C++_AC_916MS_30048KB #include <cmath> #include <cstdio> #include <cst…
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) [Problem Description] XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Fly…
先求出最小生成树,然后枚举树上的边,对于每条边"分别"找出这条割边形成的两个块中点权最大的两个 1.因为结果是A/B.A的变化会引起B的变化,两个制约.无法直接贪心出最大的A/B.故要通过枚举 2.无论magic road要加在哪里.加的边是否是最小生成树上的边,都会产生环,我们都要选择一条边删掉 注意删掉的边必须是树的环上的边.为了使结果最大.即找出最大的边 3.能够枚举两点.找出边,也能够枚举边,找出点,我是用后者.感觉比較easy写也好理解 #include <cstdio…
题目链接: csu 1116 题意: 有一幅双向图连接N个城市(标号1~n,1表示首都)  每一个城市有一个价值W. 地震摧毁了全部道路,现给出可修复的m条道路并给出修复每条道路所需的费用 问在总费用不超过k的情况下,使得  与  首都连通的全部城市  的价值和 最大 解题思路: 点的数量不超过16 ,2^16次方枚举全部城市是否在连通的集合类 再通过kruskal推断这个集合是否合法就可以 代码: #include<iostream> #include<cstdio> #incl…
题目链接:传送门 题意: 有n个点.m条边.要使n个点所有连起来且要花费最小.问有哪些边是必需要连的. 分析: 要使花费最小肯定是做最小生成树.可是题目要求哪些边是必需要用的.我们能够 这样思考,我们先求一次最小生成树,然后把这些用到的边统计起来,然后依次枚 举这n-1条边.使他们不能用,然后继续做最小生成树,假设最后求的值和第一次 不一样的话那么这条边是肯定要连的. 代码例如以下: #include <iostream> #include <cstdio> #include &l…
期望得分:100+100+40=240 实际得分:100+0+40=140 二进制拆分.二进制前缀和 #include<cstdio> #include<iostream> using namespace std; typedef long long LL; #define N 100001 int a[N],b[N],c[N]; ; ],sumb[N][]; ]; void read(int &x) { x=; char c=getchar(); while(!isdig…
Problem A. Two distinct points [题解] 显然 , 当l1不等于r2时 , (l1 , r2)是一组解 否则 , (l1 , l2)是一组合法的解 时间复杂度 : O(1) [代码] #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; template <typena…
题意: 现在给一个图,问最小生成树和次小生成树的权值和是多少; 思路: 求最小生成树的两种方法,次小生成树是交换最小生成树的其中一条边得到的,现在得到了最小生成树,枚举不在次小生成树中的边,再求一边最小生成树,这些最小生成树的最小权值就是次小生成树的权值了; AC代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmat…
[题目链接] 点击打开链接 [算法] 先求出图的最小生成树 枚举不在最小生成树上的边,若加入这条边,则形成了一个环,如果在环上且在最小生成树上的权值最大的边等于 这条边的权值,那么,显然最小生成树不唯一 树上倍增可以解决这个问题 [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #include <clocale> #include &l…
1.数组异或 (xorarray.pas/c/cpp) (xorarray.in/out) 时间限制:2s/空间限制:256M [题目描述] xor——异或,和 and 与or 一样,是一种重要的逻辑运算,他的运算规律是 0 xor 0 = 0,1 xor 1 = 0,1 xor 0 = 1,0 xor 1 = 1 两个整数之间的异或是将两个整数转化成二进制,对他们的每一位分别进行 xor 操作,例:6(110) xor 13(1101) = 11(1011) 现在我们要介绍一种新的操作——数组…