D. Dima and Bacteria
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Dima took up the biology of bacteria, as a result of his experiments, he invented k types of bacteria. Overall, there are n bacteria at his laboratory right now, and the number of bacteria of type i equals ci. For convenience, we will assume that all the bacteria are numbered from 1 to n. The bacteria of type ci are numbered from to .

With the help of special equipment Dima can move energy from some bacteria into some other one. Of course, the use of such equipment is not free. Dima knows m ways to move energy from some bacteria to another one. The way with number i can be described with integers ui, vi and xi mean that this way allows moving energy from bacteria with number ui to bacteria with number vi or vice versa for xi dollars.

Dima's Chef (Inna) calls the type-distribution correct if there is a way (may be non-direct) to move energy from any bacteria of the particular type to any other bacteria of the same type (between any two bacteria of the same type) for zero cost.

As for correct type-distribution the cost of moving the energy depends only on the types of bacteria help Inna to determine is the type-distribution correct? If it is, print the matrix d with size k × k. Cell d[i][j] of this matrix must be equal to the minimal possible cost of energy-moving from bacteria with type i to bacteria with type j.

Input

The first line contains three integers n, m, k (1 ≤ n ≤ 105; 0 ≤ m ≤ 105; 1 ≤ k ≤ 500). The next line contains k integers c1, c2, ..., ck (1 ≤ ci ≤ n). Each of the next m lines contains three integers ui, vi, xi (1 ≤ ui, vi ≤ 105; 0 ≤ xi ≤ 104). It is guaranteed that .

Output

If Dima's type-distribution is correct, print string «Yes», and then k lines: in the i-th line print integers d[i][1], d[i][2], ..., d[i][k] (d[i][i] = 0). If there is no way to move energy from bacteria i to bacteria j appropriate d[i][j] must equal to -1. If the type-distribution isn't correct print «No».

Sample test(s)
Input
4 4 2
1 3
2 3 0
3 4 0
2 4 1
2 1 2
Output
Yes
0 2
2 0
Input
3 1 2
2 1
1 2 0
Output
Yes
0 -1
-1 0
Input
3 2 2
2 1
1 2 0
2 3 1
Output
Yes
0 1
1 0
Input
3 0 2
1 2
Output
No

好吧,cf第四道居然这么水,虽然死长死长的,每个类型中取一个点深搜只走权为0的路,然后判断能不能覆盖同类型的所有点即可判断,然后更新dis[i][j] ( 1<=i<= k, 1<=j<=k)的值,走一次floyd即可
 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std; #define maxn 100005 int n,m,k;
int c[],first[maxn],next[ * maxn],v[ * maxn],x[ * maxn],dis[][],u1[ * maxn];
bool flag = ;
bool vis[maxn]; void addedge(int a,int b,int id) {
int e = first[a];
next[id] = e;
first[a] = id;
} void dfs(int u,int type) {
vis[u] = ;
//printf("u = %d type = %d\n",u,type);
for(int e = first[u]; e != -; e = next[e]) {
if(!vis[ v[e] ] && x[e] == ) {
dfs(v[e],type);
}
}
}
void solve() {
for(int i = ; i <= k; i++) {
memset(vis,,sizeof(vis));
dfs(c[i],i); for(int j = c[i - ] + ; j <= c[i]; j++) {
if(!vis[j]) {
flag = ;
//printf(" i = %d\n",i);
return;
}
} }
} void floyd() {
for(int p = ; p <= k; p++) {
for(int i = ; i <= k; i++) {
for(int j = ; j <= k; j++) {
if(dis[i][p] != - && dis[p][j] != -) {
dis[i][j] = dis[i][j] == - ? dis[i][p] + dis[p][j] :
min(dis[i][j],dis[i][p] + dis[p][j]);
}
}
}
}
}
void output() {
if(flag) {
printf("Yes\n"); for(int i = ; i < * m; i += ) {
int id1,id2;
id1 = lower_bound(c + ,c + k + ,u1[i]) - c;
id2 = lower_bound(c + ,c + k + ,v[i]) - c;
if(id1 == id2) continue;
dis[id1][id2] = dis[id2][id1] = dis[id1][id2] == - ?
x[i] : min(dis[id1][id2],x[i]);
} floyd(); for(int i = ; i <= k; i++) {
for(int j = ; j <= k; j++) {
printf("%d",dis[i][j]);
if(j != k) printf(" ");
}
printf("\n");
}
} else {
printf("No\n");
}
} int main() { freopen("sw.in","r",stdin); scanf("%d%d%d",&n,&m,&k); for(int i = ; i <= k; i++) {
scanf("%d",&c[i]);
} for(int i = ; i <= k; i++) {
c[i] += c[i - ];
} for(int i = ; i <= k; i++) {
for(int j = ; j <= k; j++) {
if(i == j) dis[i][j] = ;
else dis[i][j] = -;
}
} for(int i = ; i <= n; i++) first[i] = -; for(int i = ; i < * m; i = i + ) {
int a,b,w;
scanf("%d%d%d",&u1[i],&v[i],&x[i]);
v[i + ] = u1[i];
u1[i + ] = v[i];
x[i + ] = x[i];
addedge(u1[i],v[i],i);
addedge(v[i],u1[i],i + );
} solve(); output(); return ; }

cf div2 234 D的更多相关文章

  1. cf div2 234 E

    E. Inna and Binary Logic time limit per test 3 seconds memory limit per test 256 megabytes input sta ...

  2. 离线dfs CF div2 707 D

    http://codeforces.com/contest/707/problem/D 先说一下离线和在线:在线的意思就是每一个询问单独处理复杂度O(多少多少),离线是指将所有的可能的询问先一次都处理 ...

  3. cf div2 239 D

    D. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  4. cf div2 236 D

    D. Upgrading Array time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. cf div2 237 D

    D. Minesweeper 1D time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...

  6. cf div2 238 D

    D. Toy Sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. cf div2 238 c

    C. Unusual Product time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. cf div2 235 D

    D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...

  9. CF div2 D BFS

    http://codeforces.com/contest/676/problem/D 题目大意: 勇者去迷宫杀恶龙.迷宫是有n*m的方格子组成的.迷宫上有各种记号,这些记号表达着能走的方向.当且仅当 ...

随机推荐

  1. “猜你喜欢”是怎么猜中你心思的?

    文/Joseph A. Konstan & John Riedl)如今,到网上购物的人已经习惯了收到系统为他们做出的个性化推荐.Netflix 会推荐你可能会喜欢看的视频.TiVo 会自动把节 ...

  2. Linux开机启动程序详解

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

  3. SQL Server数据库学习笔记-设计表时应该考虑的因素

    设计数据库其实就是设计数据库中的表.到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议. 一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”. 8个建议: 第一个,首先要考虑的是咱们这 ...

  4. Android开发随笔之ScrollView嵌套GridView[ 转]

    今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...

  5. 【学习总结】iOS中NSNotification、delegate、KVO三者之间的区别与联系?

    在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegation: 2.通 ...

  6. 【BZOJ 2120】 数颜色

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  7. 论单页Web应用和RESTful架构

    单页Web应用 概述 单页Web应用并不是突然诞生的一门新技术,而是web展示的一种新的尝试.它将所有的动作局限于一个Web页面,在加载站点首页的时候就加载站点需要的JavaScript和CSS.单页 ...

  8. CentOS安装Nexus(Maven私有库)详细配置及上传本地jar到私服

    Nexus原理 Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库Maven Central(由Apache维护)中寻 ...

  9. Java学习笔记--反射

    什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...

  10. Liferay 7 portlet中所有能在@Component中修改的属性

    "com.liferay.portlet.action-timeout", "com.liferay.portlet.active", "com.li ...