bzoj3332
题解:
首先只有存在的路有可能有值
然后在存储矩阵的同时对于本来就有边的情况直接存下来这条边的值
然后跑一次最大生成树
在最大生成树的同时就可以求出矩阵的信息。
代码:
#include<bits/stdc++.h>
#define clr(x) memset(x,0,sizeof(x))
using namespace std;
const int N=1e3+;
int t,n,m,sta,fin,mapy[N][N],mapy2[N][N],fa[N],son[N][N],cnt,ans;
struct node
{
int sta,fin,wor;
}roa[N*];
int read()
{
int x=;
char ch=getchar();
bool positive=;
for (;!isdigit(ch);ch=getchar())
if (ch=='-')positive=;
for (;isdigit(ch);ch=getchar())x=x*+ch-'';
return positive?x:-x;
}
void addedge(int sta,int fin)
{
mapy[sta][fin]=read();
roa[++cnt].sta=sta;
roa[cnt].fin=fin;
roa[cnt].wor=mapy[sta][fin];
}
int fath(int u)
{
return fa[u]=(fa[u]==u?u:fath(fa[u]));
}
void check(int sta,int fin)
{
if(sta==fin&&mapy[sta][fin]!=)ans=;
if(sta>fin&&mapy[sta][fin]!=mapy[fin][sta])ans=;
}
void init()
{
n=read();m=read();cnt=;
clr(mapy);clr(mapy2);clr(fa);
clr(son);clr(roa);
for(int i=;i<=n;i++)fa[i]=son[i][++son[i][]]=i;
for(int i=;i<=m;i++)
{
sta=read();fin=read();
if(sta>fin)swap(sta,fin);
mapy[sta][fin]=;
}
ans=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(mapy[i][j])addedge(i,j);
else mapy[i][j]=read();
check(i,j);
}
}
bool cmp(node x,node y)
{
return x.wor>y.wor;
}
void unio(int u)
{
int fa1=fa[roa[u].sta],fa2=fa[roa[u].fin];
fa[fa1]=fa2;
for(int i=;i<=son[fa1][];i++)
for(int j=;j<=son[fa2][];j++)
mapy2[son[fa1][i]][son[fa2][j]]=
mapy2[son[fa2][j]][son[fa1][i]]=roa[u].wor;
for(int i=;i<=son[fa1][];i++)son[fa2][++son[fa2][]]=son[fa1][i];
}
int work(int cur)
{
printf("Case #%d: ",cur);
if(ans)return ans;
sort(roa+,roa+m+,cmp);
for(int i=;i<=m;i++)
{
if(fath(roa[i].sta)==fath(roa[i].fin))continue;
unio(i);
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(fath(i)!=fath(j)){if(mapy[i][j]!=-)ans=;}
else if(mapy2[i][j]!=mapy[i][j])ans=;
}
return ans;
}
int main()
{
t=read();
for (int i=;i<=t;i++)
{
init();
if(work(i))puts("No");
else puts("Yes");
}
return ;
}
bzoj3332的更多相关文章
- bzoj3332: 旧试题
这题就是最大生成树. 把两个点之间的期望建边排序. 把相同的期望一起做,那么在这个做之前,这些有着相同期望的点两两肯定不连,否则就输出No了. 相同的做完之后,再次for一遍check一下有没有两两之 ...
随机推荐
- Python3基础 os listdir 列举指定的所有文件及文件夹的名字
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Mysql相关问题收集
1.查询每个班级的前三名 DROP TABLE IF EXISTS `sc`; CREATE TABLE `sc` ( `id` ) NOT NULL AUTO_INCREMENT, `name` v ...
- 常见几种校验方法(CS和校验、CRC16、CRC32、BCC异或校验)
总结一些通讯协议中常用到的几种校验方法: 1.CS和校验(如:标准188协议校验方式) /// <summary> /// CS和校验 /// </summary> /// & ...
- [BZOJ1103][POI2007]大都市meg dfs序+树状数组
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- 论文笔记——Data-free Parameter Pruning for Deep Neural Networks
论文地址:https://arxiv.org/abs/1507.06149 1. 主要思想 权值矩阵对应的两列i,j,如果差异很小或者说没有差异的话,就把j列与i列上(合并,也就是去掉j列),然后在下 ...
- mini Linux制作过程(25/01)
Mini Linux: 启动流程: 参考:https://blog.csdn.net/gatieme/article/details/50914250 https://linux.cn/article ...
- 【NOI2013】小Q的修炼
题目链接:http://uoj.ac/problem/123 又开提答坑啦,要不是一定要讲题谁他妈要这样伤害自己 CASE 1,2 首先可以打一个通用暴力,用于模拟操作过程,对于每一个操作随机一个选择 ...
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- poj 2186 Popular Cows tarjan
Popular Cows Description Every cow's dream is to become the most popular cow in the herd. In a herd ...
- nginx configuration
Now that you know how to manage the service itself, you should take a few minutes to familiarize you ...