题意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i)cj);接下来给出m种仪器,有u,v,x三个值,表示说从可以在第u,v号细菌之间移动能量,代价为x。请帮助判断说这些细菌是否正确,正确的前提条件是说同种细菌之间移动能量为0,如果正确的话,给出两两细菌(种类)间移动能量的最小值。

思路:并差集+floyd;

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 100010
using namespace std;
const int inf=<<; int n,m,k;
int g[][];
int c[maxn];
int f[maxn],u[maxn],v[maxn],x[maxn];
int num[maxn];
int xx[maxn];
int sum[maxn]; int Find(int x)
{
if(x==f[x]) return x;
return f[x]=Find(f[x]);
} int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
int fx,fy;
for(int i=; i<=k; i++)
{
scanf("%d",&c[i]);
sum[i]=sum[i-]+c[i];
}
for(int i=; i<=n; i++)
{
f[i]=i;
}
for(int i=; i<=k; i++)
{
for(int j=sum[i-]+; j<=sum[i]; j++)
{
xx[j]=i;
}
}
for(int i=; i<=m; i++)
{
scanf("%d%d%d",&u[i],&v[i],&x[i]);
int uu=u[i],vv=v[i];
if(uu>vv) swap(uu,vv);
fx=Find(uu);
fy=Find(vv);
if(x[i]==)
{
if(fx!=fy)
{
f[fy]=fx;
}
}
}
bool flag=false;
for(int i=; i<=k; i++)
{
int x=Find(sum[i-]+);
int cnt=;
for(int j=sum[i-]+; j<=sum[i]; j++)
{
if(Find(j)==x) cnt++;
}
if(cnt!=c[i])
{
flag=true;
break;
}
}
if(flag)
{
printf("No\n");
}
else
{
for(int i=; i<=k; i++)
{
for(int j=; j<=k; j++)
{
if(i==j) g[i][j]=;
else g[i][j]=inf;
}
}
for(int i=; i<=m; i++)
{
g[xx[u[i]]][xx[v[i]]]=min(g[xx[u[i]]][xx[v[i]]],x[i]);
g[xx[v[i]]][xx[u[i]]]=min(g[xx[v[i]]][xx[u[i]]],x[i]);
}
for(int c=; c<=k; c++)
{
for(int i=; i<=k; i++)
{
if(i==c)continue;
for(int j=; j<=k; j++)
{
if(i==j||j==c) continue;
g[i][j]=min(g[i][j],g[i][c]+g[c][j]);
}
}
}
printf("Yes\n");
for(int i=; i<=k; i++)
{
for(int j=; j<=k; j++)
{
if(g[i][j]==inf&&i!=j)
{
printf("-1 ");
}
else printf("%d ",g[i][j]);
}
printf("\n");
}
}
}
return ;
}

codeforces 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 400 D Dima and Bacteria【并查集 Floyd】

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

  3. Codeforces 579A. Raising Bacteria

    You are a lover of bacteria. You want to raise some bacteria in a box. Initially, the box is empty. ...

  4. Codeforces400D Dima and Bacteria

    题意:给你一个无向有权的图,图上的点被分成了几类,对于同类的点你需要判断它们之间相互的最短距离是不是0.满足这个条件之后要输出的是类与类之间的最短距离的矩阵.点给到10^5这么多,判断同类的点显然不能 ...

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

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

  6. CodeForces 400

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

  7. Codeforces Round #234 (Div. 2)

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

  8. Codeforces Round#320 Div2 解题报告

    Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...

  9. SDKD 2017 Summer Single Training #03

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

随机推荐

  1. jQuery EasyUI中常常遇到的问题(FAQ)

    1.easyui弹出页面中无法引入其它外部js文件的问题 easyui弹出的对话框假设为jsp.html页面,easyui仅仅会将这些页面中的<body></body>内部的内 ...

  2. 《Java并发编程实战》第六章 任务运行 读书笔记

    一. 在线程中运行任务 无限制创建线程的不足 .线程生命周期的开销很高 .资源消耗 .稳定性 二.Executor框架 Executor基于生产者-消费者模式.提交任务的操作相当于生产者.运行任务的线 ...

  3. [转] react-native 之布局篇

    PS: 苹果使用的宽度单位是为了设计开发者在应用上使用接近的数值.比如宽度范围都在320-414之间.但是宽度对应到像素是有一个转换比例的,对于背景图尤其要准备足够像素的图片.这个足够像素可以通过公式 ...

  4. 在Mac OS X下安装Android Studio

    在Mac OS X下安装Android Studio只需要几步. 1. 下载Android Studio安装包(.dmg). 2. 打开Terminal输入java -version命令查看是否已安装 ...

  5. ZOJ 3903 Ant(公式推导)

    这个公式推导过程是看的这位大牛的http://blog.csdn.net/bigbigship/article/details/49123643 扩展欧几里德求模的逆元方法: #include < ...

  6. day-10

    /* 还是习惯在插入里面写东西 233 今晚停电了 一屋人唱歌讲鬼故事 挺开心的 还有不到十天大家就要分开了 还记得第一次来机房的时候 大家都还不认识 到现在快一年了 大家可以一起闹一起笑 一起没心没 ...

  7. ASP.NET图片验证码

    1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System; using System.Collections; using System.C ...

  8. HTML5 文件域+FileReader 分段读取文件并上传(七)-WebSocket

    一.单文件上传实例 HTML: <div class="container"> <div class="panel panel-default" ...

  9. 解决vim不能使用方向键和退格键问题

    1.使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母,或者退格键却变成方向键的功能 只要重装一下vi的依赖包即可完美解决vi编辑器方向键变字母的问题.rpm -e vim-enhance ...

  10. 在Iframe框架下如何跳转到登录界面

    在Iframe框架下跳转到登录界面总会跳到子界面中,类似于下图 试用Respon.Redirect()不行, 用Js函数,但我跳转代码都是写在cs文件中的,用Respose.write(),js函数根 ...