题目传送门(内部题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模拟测试]:联合权值·改(暴力)的更多相关文章

  1. 联合权值(NOIP2014)奇特的模拟。。

    原题传送门 这道题瞄了一眼还以为是SPFA最短路. 后面发现距离为2.. 好像可以枚举中间点来着? 时间效率O(n*(2n-2))≍O(n^2) BOOM!(PS:9018上过了,说明数据太水了..) ...

  2. P1906联合权值

    描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...

  3. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  4. luogu P1351 联合权值

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  5. Codevs 3728 联合权值

    问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...

  6. [NOIP2014] 提高组 洛谷P1351 联合权值

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  7. 【洛谷P1351】联合权值

    我们枚举中间点,当连的点数不小于2时进行处理 最大值好搞 求和:设中间点 i 所连所有点权之和为sum 则对于每个中间点i的联合权值之和为: w[j]*(sum-w[j])之和 #include< ...

  8. Noip2014 提高组 T2 联合权值 连通图+技巧

    联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...

  9. NOIP2014 联合权值

    2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u ...

随机推荐

  1. Linq操作之Except,Distinct,Left Join 【转】

    最近项目中用到了Linq中Except,Distinct,Left Join这几个运算,这篇简单的记录一下这几种情形. Except      基础类型使用Linq的运算很简单,下面用来计算两个集合的 ...

  2. 安装多个ORACLE导致多个Oracle HOME的情况!

    Oracle由于版本的不同,在注册表中产生的注册表信息也有所不同,但主要的键值信息还是一样的,例如Oracle10g比oracle9i在注册表中表现的更为“简洁”,在未知的情况下,获取Oracle10 ...

  3. IOS 伪类:active失效

    IOS中不兼容:active伪类,所以在状态控制上就会有问题,解决办法是,添加一个空的点击事件: 移动端添加:ontouchstart <a class="m-btn" on ...

  4. cookie以一个或多个空格开头

    作为一个整体,如果cookie以一个或多个空格开头,请用空格替换所有空格:如果cookie以一个或多个空格结尾,请用空格替换所有空格. 象征意义: \ S:空间,空间 +一个或多个 ^开始,^s,以空 ...

  5. 使用eclipse根据wsdl生成客户端

    1.在需要生成的java项目右键new →other→ Web Service Client . 2.点击 Next.进入下面的界面,选择Brown...,选择WSDL,然后选择Next 3.Serv ...

  6. Java语言基础(7)

    1 for循环 案例:Demo1 1+1/2+1/3+1/4+1/5+1/6+...+1/100 = ? 1/1+1/2+1/3+1/4+1/5+1/6+...+1/100 = ? 分子都是1,分母是 ...

  7. Matrix Factorization in RecSys

    矩阵分解在推荐系统中的应用. 参考链接:知乎. 传统SVD,Funk-SVD,Bias-SVD,SVD++. SVD奇异值分解及其意义. 漫谈奇异值分解.

  8. Java高级技术点面试问题-IO相关面试问题

    java网络编译: 基础知识:①.ip地址和端口号:ip地址是用来识别网络中的一个实体,而这个实体可以理解为一个主机,而端口号则是用来区分具体的通讯程序的.②.tcp / udp协议:tcp是一个可靠 ...

  9. QT容器类

    QList<T> 是一个指针数组,可以使用下标 append(), prepend(), insert() QList<QString> list; list<<& ...

  10. Array 对象-sort()

    Array 对象-sort() sort方法对数组成员进行排序,默认是按照字典顺序排序.排序后,原数组将被改变. sort方法不是按照大小排序,而是按照字典顺序.也就是说,数值会被先转成字符串,再按照 ...