BZOJ 3332
题解:给边赋上权值,然后求最大生成树,如果不符合那就无解
证明:留坑
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxN=;
const int maxM=;
const int oo=; int TT;
int n,m;
int f[maxN][maxN];
struct Edge{
int u,v,ed;
}edges[maxM];
bool mycmp(const Edge &E1,const Edge &E2){
return E1.ed>E2.ed;
} int father[maxN];
int Getf(int x){
if(father[x]==x)return x;
return father[x]=Getf(father[x]);
}
void Unionn(int x,int y){
int fx=Getf(x);
int fy=Getf(y);
if(fx!=fy){
father[fx]=fy;
}
} int cntedge=;
int head[maxN]={};
int to[maxN<<],nex[maxN<<],dist[maxN<<];
void Addedge(int x,int y,int z){
nex[++cntedge]=head[x];
to[cntedge]=y;
dist[cntedge]=z;
head[x]=cntedge;
} int fdist[maxN];
void Dfs(int x,int fa){
for(int i=head[x];i;i=nex[i]){
if(to[i]==fa)continue;
fdist[to[i]]=min(fdist[x],dist[i]);
Dfs(to[i],x);
}
} void Myinit(){
cntedge=;
memset(head,,sizeof(head));
}
int rd(){
int r=,k=;
char c=getchar();
for(;c<''||c>'';c=getchar())if(c=='-')k=-;
for(;c>=''&&c<='';c=getchar())r=r*+c-'';
return r*k;
} int main(){
scanf("%d",&TT);
for(int t=;t<=TT;++t){
Myinit();
scanf("%d%d",&n,&m);
for(int i=;i<=m;++i)scanf("%d%d",&edges[i].u,&edges[i].v);
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
scanf("%d",&f[i][j]);
}
}
for(int i=;i<=m;++i){
int u=edges[i].u;
int v=edges[i].v;
edges[i].ed=f[u][v];
}
sort(edges+,edges++m,mycmp);
for(int i=;i<=n;++i)father[i]=i;
for(int i=;i<=m;++i){
int u=edges[i].u,v=edges[i].v,z=edges[i].ed;
if(Getf(u)==Getf(v))continue;
Unionn(u,v);
Addedge(u,v,z);
Addedge(v,u,z);
}
int fla=;
for(int u=;u<=n;++u){
fdist[u]=oo;
Dfs(u,);
for(int v=;v<=n;++v){
if(u==v)continue;
if(Getf(u)!=Getf(v)){
if(f[u][v]!=-){
fla=;break;
}
}else{
if(f[u][v]!=fdist[v]){
fla=;break;
}
}
}
if(!fla)break;
}
if(fla)printf("Case #%d: Yes\n",t);
else printf("Case #%d: No\n",t);
}
return ;
}
BZOJ 3332的更多相关文章
- [BZOJ 3332]旧试题
Description 圣诞节将至.一年一度的难题又摆在wyx面前——如何给妹纸送礼物. wyx的后宫有n人,这n人之间有着复杂的关系网,相互认识的人有m对.wyx想要量化后宫之间的亲密度,于是准备给 ...
- [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)
[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- A way to find out how activity for mssql and oracle
Dear buddy, Have you confuse that how activity about my databases, if we conside it by using backup ...
- JS 循环赋值
var x_world_map_tiles = 100; var y_world_map_tiles = 100; var world_map_array = []; for (i=0; i<= ...
- 解决新建maven工程没有web.xml的问题
首先确定创建maven工程时选择的打包方式为 war 创建后如图所示没有web.xml文件以及相关文件夹,错误信息:缺少web.xml文件 解决方法: 右击maven项目,找到ProjectFacet ...
- python之常见模块(time,datetime,random,os,sys,json,pickle)
目录 time 为什么要有time模块,time模块有什么用?(自己总结) 1. 记录某一项操作的时间 2. 让某一块代码逻辑延迟执行 时间的形式 时间戳形式 格式化时间 结构化时间 时间转化 总结: ...
- vim学习--usr03 moving around
Word movement 小写的"w""ge""e""b" w表示向后移动到一个单词开头 ge表示向前移动到一个单词末 ...
- java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2
我们继续学习类与对象,上一篇我们定义了 坐标类(Point), 这次我们在Point的基础上,创建一个圆类(Circle). 案例:创建一个圆类 题目要求: 计算圆的周长和面积:求判断两个圆的位置关 ...
- d3基本图形
柱状图 散点图.气泡图 ...
- Day2-O-Coloring a Tree CodeForces-902B
You are given a rooted tree with n vertices. The vertices are numbered from 1 to n, the root is the ...
- JDK8中的HashMap源码
背景 很久以前看过源码,但是猛一看总感觉挺难的,很少看下去.当时总感觉是水平不到.工作中也遇到一些想看源码的地方,但是遇到写的复杂些的心里就打退堂鼓了. 最近在接手同事的代码时,有一些很长的pytho ...
- oracle,mysql,SqlServer三种数据库的分页查询
MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...