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. Moses更改权重的命令变化 -d -t -

    -l  可以用: weight-l 或者lm  (不需要在前面加-)   还是用-weight-overwrite “Distortion0= 0"更保险 reording weight i ...

  2. DB2建立不记录日志的表

    )); ,'JACK'); ,'Timo'); -----建立无日日志表 --方法一:(表存在) CREATE TABLE TB_7 LIKE TB_6 NOT LOGGED INITIALLY; - ...

  3. java reflect 初始学习 动态加载类

    首先要理解Class类: 在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的 ...

  4. oracle 11g 添加控制文件

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  5. ES5 vs ES6

    ES5中 var React = require('react-native'); ES6中 import React from 'react-native'; .babelrc文件中添加一下内容 { ...

  6. 【Javascript】: for循环中定义的变量在for循环体外也有效

    for循环中定义的变量在for循环体外也有效 <script> (function(){ var a = 111; for(var i=0;i<5;i++){ var carl = ...

  7. 你必须懂的 T4 模板:深入浅出

    示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...

  8. Go语言工程结构

    Go是一门推崇软件工程理念的编程语言. Go的代码必须放在GOPATH目录下,它应该包含三个子目录: src:用于以代码包的形式组织并保存Go源码文件.应该分为三类:库源码文件.命令源码文件.测试源码 ...

  9. linux php安装zookeeper扩展

    linux php安装zookeeper扩展 tags:php zookeeper linux ext 前言: zookeeper提供很犀利的命名服务,并且集群操作具有原子性,所以在我的多个项目中被采 ...

  10. web安全之token

    Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交. 2)anti c ...