codeforces Dima and Bacteria
题意:给出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的更多相关文章
- codeforces 400D Dima and Bacteria 并查集+floyd
题目链接:http://codeforces.com/problemset/problem/400/D 题目大意: 给定n个集合,m步操作,k个种类的细菌, 第二行给出k个数表示连续的xi个数属于i集 ...
- codeforces 400 D Dima and Bacteria【并查集 Floyd】
题意:给出n个点,分别属于k个集合,判断每个集合里面的点的距离都为0,为0的话输出yes,并输出任意两个集合之间的最短路 这道题目有两个地方不会处理, 先是n个点,分别属于k个集合,该怎么记录下来这里 ...
- Codeforces 579A. Raising Bacteria
You are a lover of bacteria. You want to raise some bacteria in a box. Initially, the box is empty. ...
- Codeforces400D Dima and Bacteria
题意:给你一个无向有权的图,图上的点被分成了几类,对于同类的点你需要判断它们之间相互的最短距离是不是0.满足这个条件之后要输出的是类与类之间的最短距离的矩阵.点给到10^5这么多,判断同类的点显然不能 ...
- TTTTTTTTTTT 400D Dima and Bacteria 细菌 最短路
题意: 题目大意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i) ...
- CodeForces 400
A - Inna and Choose Options Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d &a ...
- Codeforces Round #234 (Div. 2)
A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- SDKD 2017 Summer Single Training #03
今天的题目有 6 个. 第一题: CodeForces - 400D Dima and Bacteria 这个题实际是不难的,难的可能在题意的理解上还有题干有点长,这个题很考察题意上面,知识点很熟悉 ...
随机推荐
- Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...
- Java语言基础(一)
Java语言基础(一) 在这里说明一下,有基础的跳过 高手跳过.在这里我想复习以前的东西,以及给正在学java的一些帮助 我用的MyEclipse8.5编写java代码,有需要联系我 QQ:9035 ...
- java.sql.SQLException: Invalid parameter object type. Expected 'java.util.Map' but found 'java.lang.String 转载
java.sql.SQLException: Invalid parameter object type. Expected 'java.util.Map' but found 'java.lang. ...
- 在Eclipse中显示空格(space)和制表符(tab)
显示空格(space)和制表符(tab)设置: Window->Preferences->General->Editors->Text Editors->Show whi ...
- html_entity_decode() 函数
html_entity_decode() 函数 定义和用法 The html_entity_decode() function converts HTML entities to characte ...
- img标签块状与内联的博弈
新手,请前辈们不吝赐教 说到html中img标签是内联还是块状元素,我们首先要知道什么是内联(inline),什么又是块状(block)? 我也在网上查看了一些别人分享的经验,有一个讲到了文档流的概念 ...
- android 高德地图API 之 java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLibrary returned null错误
错误场景: 运行android app时,在运行到调用高德地图API时,出现 “java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLi ...
- Android layout的横竖屏处理
一.layout-land和layout-prot的区别与使用 默认情况下,创建的Android项目里只有一个layout文件夹,尽管这样也可以横竖屏切换用,但是某些布局横屏过后闲的格外的丑,如下图 ...
- MyEclipse起步Tomcat报错“A configuration error occurred during…” MyEclipse起步Tomcat报错“A configuration error occurred during…”
- 关于UIScrollView属性和方法的总结
iOS中UIScollView的总结 在iOS开发中可以说UIScollView是所有滑动类视图的基础,包括UITableView,UIWebView,UICollectionView等等,UIScr ...