[CSP-S模拟测试]:联合权值·改(暴力)
题目传送门(内部题143)
输入格式
输入文件的第一行为三个整数$n,m,t$。其中$t$是数据类型。
接下来$m$行,每行两个正整数$u,v$,表示图中的一条边。数据保证不存在重边或自环的情况。
输入数据的最后一行是$n$个正整数,表示$W_1,W_2,...,W_n$。
输出格式
输出文件共包含两行两个整数。第一行,若$t\neq 2$,则你需要输出最大的联合权值(无则输出$-1$),否则输出$0$;第二行,若$t\neq 1$,则你需要输出联合权值的总和,否则输出$0$。
样例
样例输入:
4 4 3
1 2
1 3
2 3
2 4
100 1 100 1
样例输出:
100
400
数据范围与提示
对于$10\%$的数据,满足$n\leqslant 100$。
对于另$30\%$的数据,满足$t=1$。
对于另$30\%$的数据,满足$t=1$。
对于$100\%$的数据,满足$1\leqslant n,m\leqslant 30,000,1\leqslant t\leqslant 3,1\leqslant W_i\leqslant 100$。
题解
暴力$95$,然而我读错题了……
只要$w$不一样就行,然而我还以为是一道$SB$题(不过本来也是)。
发现求和很好求,考虑求最大值。
去**正解。
考虑剪枝。
可以把连向一个点的所有点按点权从大到小排序,枚举点的时候找到最先的一组$break$就好了。
时间复杂度:$\Theta(n^2)$。
期望得分:$10$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int w[30001];
bitset<30000> bit[30001];
vector<int> vec[30001];
int mx;
long long ans;
bool cmp(int a,int b){return w[a]>w[b];}
int main()
{
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
vec[u].push_back(v);
vec[v].push_back(u);
bit[u][v]=bit[v][u]=1;
}
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
for(int i=1;i<=n;i++)sort(vec[i].begin(),vec[i].end(),cmp);
for(int x=1;x<=n;x++)
for(int i=0;i<vec[x].size();i++)
for(int j=i+1;j<vec[x].size();j++)
{
if(bit[vec[x][i]][vec[x][j]])continue;
mx=max(mx,w[vec[x][i]]*w[vec[x][j]]);
break;
}
for(int x=1;x<=n;x++)
{
int l=0,r=0;
for(int i=0;i<vec[x].size();i++)
{
ans-=1LL*w[x]*w[vec[x][i]]*(bit[x]&bit[vec[x][i]]).count();
l+=w[vec[x][i]];r+=w[vec[x][i]]*w[vec[x][i]];
}
ans+=1LL*l*l-r;
}
printf("%d\n%lld\n",(t==2)?0:mx,(t==1)?0:ans);
return 0;
}
rp++
[CSP-S模拟测试]:联合权值·改(暴力)的更多相关文章
- 联合权值(NOIP2014)奇特的模拟。。
原题传送门 这道题瞄了一眼还以为是SPFA最短路. 后面发现距离为2.. 好像可以枚举中间点来着? 时间效率O(n*(2n-2))≍O(n^2) BOOM!(PS:9018上过了,说明数据太水了..) ...
- P1906联合权值
描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...
- NOIp 2014 #2 联合权值 Label:图论 !!!未AC
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- luogu P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- Codevs 3728 联合权值
问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...
- [NOIP2014] 提高组 洛谷P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- 【洛谷P1351】联合权值
我们枚举中间点,当连的点数不小于2时进行处理 最大值好搞 求和:设中间点 i 所连所有点权之和为sum 则对于每个中间点i的联合权值之和为: w[j]*(sum-w[j])之和 #include< ...
- Noip2014 提高组 T2 联合权值 连通图+技巧
联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...
- NOIP2014 联合权值
2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1.图上两点(u, v)的距离定义为u ...
随机推荐
- 解决tomcat端口冲突
1.根据8080端口号查找占用8080端口的进程 netstat -ano|findstr " 进程id:6352 2.根据进程ID查找进程名字 tasklist|findstr " ...
- java字符串大小写转换
String test="SHA34cccddee"; System.out.println(test.toUpperCase());//小写转大写 String test= ...
- 数组通常在JS中使用
数组通常在JS中使用,例如具有相同名称的多个输入.如果它们是动态生成的,则需要在提交时确定它们是否是数组.如果(文件).MyList.长度!=“未定义”)此用法不正确.正确的是如果(文件.MyList ...
- javascrip标签的href属性
1.标签的href属性用于指定超链接目标的URL.href属性的值可以是任何有效文档的相对或绝对URL,包括片段ID和javascript代码段. 2.javascript:这是一个虚假的协议.所谓的 ...
- 小程序API接口调用
1.在config.js中写入api接口及appkey 2.在HTTP.js中引入config.js,然后新建HTTP.js,在里进行wx.request的封装. 定义一个HTTP的类,来类里定义 ...
- Redis日志级别
Redis默认的设置为verbose,开发测试阶段可以用debug,生产模式一般选用notice 1. debug:会打印出很多信息,适用于开发和测试阶段 2. verbose(冗长的):包含很多不太 ...
- python面向编程: 常用模块补充与面向对象
一.常用模块 1.模块 的用用法 模块的相互导入 绝对导入 从sys.path (项目根目录)开始的完整路径 相对导入 是指相对于当前正在执行的文件开始的路径 只能用于包内模块相互间导入 不能超过顶层 ...
- Elasticsearch中Mapping
映射(Mapping) 概念:创建索引时,可以预先定义字段的类型以及相关属性.从而使得索引建立得更加细致和完善.如果不预先设置映射,会自动识别输入的字段类型. 官方文档(字段数据类型):https:/ ...
- python+Appium自动化:各种元素定位方法
name定位 driver.find_element_by_name('飞利浦净水').click() 测试结果报错:selenium.common.exceptions.InvalidSelecto ...
- vmware虚拟机新增磁盘及挂载详细步骤
虚拟机新增磁盘及挂载步骤 1.新增磁盘 (1) 编辑虚拟机设置->添加 (2) 选择硬盘->下一步 (3) 选择SCSI格式,下一步 (4) 创建新虚拟磁盘,下一步 (5) 设置 ...