题意:给你一个无向有权的图,图上的点被分成了几类,对于同类的点你需要判断它们之间相互的最短距离是不是0.满足这个条件之后要输出的是类与类之间的最短距离的矩阵。点给到10^5这么多,判断同类的点显然不能跑最短路,所以直接的方法必然是并查集,对边为0的点做一次并查集,对同类的点判一下find(x)==find(y)就可以了。 然后就是将同类的点抽象出一个新的点,这个时候只有500个点,然后就可以跑一下floyd了。 题意有坑的地方,所以没有AC比赛的时候。 这题倒是很好的练了一下基础的内容并查集和floyd。

#pragma warning(disable:4996)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue>
#define ll long long
#define maxn 100500
#define inf 0x3f3f3f3f
using namespace std; vector<int> ZG[maxn];
int type[550];
int sum[550];
int n, m, k; int fa[maxn];
int find(int x)
{
return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
} bool deterMine(int index)
{
int sid = sum[index - 1];
for (int i = sid + 1; i <= sid + type[index]; i++){
if (find(sid + 1) != find(i)) return false;
}
return true;
} int dist[550][550]; int main()
{
while (cin >> n >> m >> k)
{
sum[0] = 0;
for (int i = 1; i <= k; i++){
scanf("%d", &type[i]);
sum[i] = sum[i - 1] + type[i];
}
int ui, vi, wi;
memset(dist, 0x3f, sizeof(dist));
for (int i = 0; i <= n; i++) fa[i] = i;
for (int i = 0; i <= k; i++) { dist[i][i] = 0; }
for (int i = 0; i < m; i++){
scanf("%d%d%d", &ui, &vi, &wi);
int ut = lower_bound(sum, sum + 1 + k, ui) - sum;
int vt = lower_bound(sum, sum + 1 + k, vi) - sum;
dist[ut][vt] = min(dist[ut][vt], wi);
dist[vt][ut] = min(dist[vt][ut], wi);
if (wi == 0) {
if (find(ui) != find(vi)){
fa[find(ui)] = fa[find(vi)];
}
}
}
for (int i = 1; i <= n; i++) find(i);
bool flag = true;
for (int i = 1; i <= k; i++){
if (deterMine(i) == false){
flag = false;
}
}
if (!flag) { puts("No"); continue; }
puts("Yes");
for (int kk = 1; kk <= k; kk++){
for (int i = 1; i <= k; i++){
for (int j = 1; j <= k; j++){
if (dist[i][kk] + dist[kk][j] < dist[i][j]){
dist[i][j] = dist[i][kk] + dist[kk][j];
}
}
}
}
for (int i = 1; i <= k; i++){
for (int j = 1; j <= k; j++){
if (j != 1) printf(" ");
if (dist[i][j] < inf) printf("%d", dist[i][j]);
else printf("%d", -1);
}
puts("");
}
}
return 0;
}

Codeforces400D Dima and Bacteria的更多相关文章

  1. codeforces 400D Dima and Bacteria 并查集+floyd

    题目链接:http://codeforces.com/problemset/problem/400/D 题目大意: 给定n个集合,m步操作,k个种类的细菌, 第二行给出k个数表示连续的xi个数属于i集 ...

  2. codeforces Dima and Bacteria

    题意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i)cj):接下 ...

  3. codeforces 400 D Dima and Bacteria【并查集 Floyd】

    题意:给出n个点,分别属于k个集合,判断每个集合里面的点的距离都为0,为0的话输出yes,并输出任意两个集合之间的最短路 这道题目有两个地方不会处理, 先是n个点,分别属于k个集合,该怎么记录下来这里 ...

  4. TTTTTTTTTTT 400D Dima and Bacteria 细菌 最短路

    题意: 题目大意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i) ...

  5. cf div2 234 D

    D. Dima and Bacteria time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  6. CodeForces 400

    A - Inna and Choose Options Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d &a ...

  7. SDKD 2017 Summer Single Training #03

    今天的题目有 6 个. 第一题: CodeForces - 400D  Dima and Bacteria 这个题实际是不难的,难的可能在题意的理解上还有题干有点长,这个题很考察题意上面,知识点很熟悉 ...

  8. Codeforces Round #234 (Div. 2)

    A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...

  9. CodeForces460B. Little Dima and Equation

    B. Little Dima and Equation time limit per test 1 second memory limit per test 256 megabytes input s ...

随机推荐

  1. GridView、DataGrid、DataList、Repeater、ListView、DetailsView、FormView

    列表类   GridView 控件   GridView 控件以表的形式显示数据,并提供对列进行排序.分页.翻阅数据以及编辑或删除单个记录的功能.   特征:一行一条记录,就像新闻列表一样:带分页功能 ...

  2. 《搭建DNS内外网的解析服务》RHEL6

    首先说下: 搭建的这个dns内外网的解析,是正向解析,反向解析自己根据正向解析把文件颠倒下就ok了 第一步我们先搭建一个DNS的正反向解析(参考上篇DNS正反向解析,这是上篇做过的) 第二部才是搭建内 ...

  3. Winform 导出Excel

    private void 导出excelToolStripMenuItem_Click(object sender, EventArgs e) { ) { var saveFileDialog1 = ...

  4. 重写DataGridViewColumn

    做个项目需要用到DataGridView,这个控件还是挺好用的,但是今天却发现无法实现自己想要的功能.主要是DataGridViewCheckBoxColumn这个列虽然是提供了复选框,但是却未能在复 ...

  5. WFP: 读取XPS文件或将word、txt文件转化为XPS文件

    读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: <Window x:Class="WpfWord.MainWindow"    ...

  6. hbase meta表的结构

    下面看下hbase:meta 表的结构,hbase:meta表中,保存了每个表的region地址,还有一些其他信息,例如region的名字,HRegionInfo,服务器的信息.hbase:meta表 ...

  7. 第25章 项目6:使用CGI进行远程编辑

    初次实现 25-1 simple_edit.cgi --简单的网页编辑器 #!D:\Program Files\python27\python.exeimport cgiform = cgi.Fiel ...

  8. 修改linux命令行提示符

    安装了ubuntu1304版本,发现命令行@后面的名称太长,影响视觉美观,决定修改一下.修改当前用户目录下面的.bashrc文件即可达到目的. 打开.bashrc文件,找到下面的内容:if [ &qu ...

  9. 1099. Build A Binary Search Tree (30)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  10. Array和ArrayList的异同点【转】

    相信数组是大家在编程最常使用的,不论任何语言都存在数组这样的数据结构,由于C#语言是完全面向对象的,所以在C#中的数组也是对象,实际上就是Array类的实例,Array类的使用可以说是使用最频繁的,只 ...