cf div2 234 D
2 seconds
256 megabytes
standard input
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.
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 .
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».
- 4 4 2
1 3
2 3 0
3 4 0
2 4 1
2 1 2
- Yes
0 2
2 0
- 3 1 2
2 1
1 2 0
- Yes
0 -1
-1 0
- 3 2 2
2 1
1 2 0
2 3 1
- Yes
0 1
1 0
- 3 0 2
1 2
- 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的更多相关文章
- cf div2 234 E
E. Inna and Binary Logic time limit per test 3 seconds memory limit per test 256 megabytes input sta ...
- 离线dfs CF div2 707 D
http://codeforces.com/contest/707/problem/D 先说一下离线和在线:在线的意思就是每一个询问单独处理复杂度O(多少多少),离线是指将所有的可能的询问先一次都处理 ...
- cf div2 239 D
D. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- cf div2 236 D
D. Upgrading Array time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- cf div2 237 D
D. Minesweeper 1D time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- cf div2 238 D
D. Toy Sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- cf div2 238 c
C. Unusual Product time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- cf div2 235 D
D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...
- CF div2 D BFS
http://codeforces.com/contest/676/problem/D 题目大意: 勇者去迷宫杀恶龙.迷宫是有n*m的方格子组成的.迷宫上有各种记号,这些记号表达着能走的方向.当且仅当 ...
随机推荐
- VC下的人人对弈五子棋(dos)
#include"stdio.h"#include"stdlib.h"#include"string.h"#include "io ...
- hdu 1237 简单计算器
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式, ...
- EF 随机排序
/// <summary> /// 数据上下文扩展 /// </summary> public partial class dbDataContext : IUnitOfWor ...
- Object-c 语法 - 头文件引用(@class/#import/#include)
一. Objective-C 中 #import 和 #include 的区别 预编译指令 Objective-C:#import:由gcc编译器支持 C,C++:#include 在 Objecti ...
- Android开发随笔之ScrollView嵌套GridView[ 转]
今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...
- H5 input type="search" 不显示搜索 解决方法
在IOS(ipad iPhone等)系统的浏览器里打开H5页面.如下写法: <input type="search" name="search” id=" ...
- R语言 如何为图片添加文字说明(转载)
转载:(中文翻译者)[http://blog.csdn.net/chen790646223/article/details/49766659] (原文链接)[http://datascienceplu ...
- 查看BADI有哪些实现
TCODE:SE18
- 水王ID查找
一. 题目 1 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. ...
- hdu 2629 Identity Card (字符串解析模拟题)
这题是一个字符串模拟水题,给12级学弟学妹们找找自信的,嘿嘿; 题目意思就是要你讲身份证的上的省份和生日解析出来输出就可以了: http://acm.hdu.edu.cn/showproblem.ph ...