题目:

【问题描述】

给你一个有向图,有 N 个点,标号为 0 到 N -1,图中的每条边有个权值,每次你经过一条边,它的权值将被记入你的得分,如果同样的边被经过多次,它的权值每次都将被记入总分,权值为-499 到 499之间的整数,图中没有自环,现在你要从点 0 到点 1,这项任务必须在时限 T 或 T 之前完成,时间以秒记,每一秒你一定要走 S 步(不多不少),一步的含义是指从当前所在的点 U 沿着某条边( U , V )到达点 V ,若S>1的话,再沿着点V往(V,X)到达点X。你的目标就是完成任务并且得到尽量多的分数。

【输入格式】

第一行一个整数 N 表示该有向图的点数。接下来 N 行,每行有 N 个整数,第 i 行第 j 个数描述了点 i -1 到点 j- 1 之间的边的关系,如果是 0 ,表示它们之间没有边,否则这个数就是 i- > j 这条边的边权,保证第 i 行第 i 个数为 0。最后一行两个整数 S , T ,意义如题目所述。

【输出格式】

仅输出一行,如果不能完成,输出 IMPOSSIBLE,否则输出能够获得的最大分数。

【输入样例】

2

0 1

1 0

3 2

【输出样例】

3

【数据范围】

30%的数据,1≤ N , S , T ≤10。

100%的数据,1≤ N ≤50,1≤ S ≤100,1≤ T ≤109 。

题解:用f[i][j][t]表示从i到j,走t次的最大值

矩阵更新,预处理每两个点走一次的最大值

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL inf=0x3fffffffffffffff;
int n,S,T;
LL Ans;
struct Ma
{
LL val[][];
void clear()
{
for (int i=;i<n;i++)
for (int j=;j<n;j++)val[i][j]=-inf;
for (int i=;i<n;i++) val[i][i]=;
}
void write()
{
for (int i=;i<n;i++)
{
for (int j=;j<n;j++)printf("%lld ",val[i][j]);
puts("");
}
}
}M1,M2,M3,M4;
Ma times(Ma a,Ma b)
{
Ma c;
for (int i=;i<n;i++)
for (int j=;j<n;j++)
{
c.val[i][j] = -inf;
for (int k=;k<n;k++)
{
if (a.val[i][k]==-inf||b.val[k][j]==-inf)
continue;
c.val[i][j]=max(c.val[i][j],
a.val[i][k]+b.val[k][j]);
}
}
return c;
}
Ma Pow(Ma a,int b)
{
Ma Ans;
Ans.clear();
for (;b;b>>=,a=times(a,a))
if (b&) Ans=times(Ans,a);
return Ans;
}
void solve()
{
M3=Pow(M2,T-*n);
Ans=max(Ans,M3.val[][]);
for (int i=T-*n+;i<=T;i++)
{
M3=times(M3,M2);
Ans=max(Ans,M3.val[][]);
}
}
int main()
{
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
scanf("%d",&n);
for (int i=;i<n;i++)
for (int j=;j<n;j++)
{
scanf("%lld",&M1.val[i][j]);
if (M1.val[i][j]==)M1.val[i][j]=-inf;
}
scanf("%d%d",&S,&T);
M2=Pow(M1,S);
Ans=-inf;
M4.clear();
for (int i=;i<=min(T,*n);i++)
{
M4=times(M4,M2);
Ans=max(Ans,M4.val[][]);
}
if (T>=*n+) solve();
if (Ans==-inf) puts("IMPOSSIBLE");
else printf("%lld\n",Ans);
return ;
}

Graph的更多相关文章

  1. [开发笔记] Graph Databases on developing

    TimeWall is a graph databases github It be used to apply mathematic model and social network with gr ...

  2. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  3. POJ 2125 Destroying the Graph 二分图最小点权覆盖

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8198   Accepted: 2 ...

  4. [LeetCode] Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  5. [LeetCode] Graph Valid Tree 图验证树

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  6. [LeetCode] Clone Graph 无向图的复制

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  7. 讲座:Influence maximization on big social graph

    Influence maximization on big social graph Fanju PPT链接: social influence booming of online social ne ...

  8. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

  9. Theano Graph Structure

    Graph Structure Graph Definition theano's symbolic mathematical computation, which is composed of: A ...

  10. 纸上谈兵: 图 (graph)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...

随机推荐

  1. 如何创建自己的python包

    写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易. 长用的安装第三方lib的方法有easy_install和pip,这两个的 ...

  2. javaweb 实战_1

    购物车项目 Primary SQL语句 product create table product ( id ) default null, name varchar() default null, p ...

  3. 51nod 1103 N的倍数

    1103 N的倍数   一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8, ...

  4. caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor

    http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...

  5. 【Coursera】Sixth Week(2)

    DNS:Domain Name System The Domain Name System convert user-friendly names,like www.umich.edu, to net ...

  6. NRF24L01 射频收发 使用方法

    在干啥 这两天在调nrf24l01,最终还是参考正点原子的例程才调通,看芯片手册太难了 还要说啥废话 废话说到这,接下来上代码 SPI协议 spi.c #include "spi.h&quo ...

  7. HHVM代码规范

    原文戳我 本文旨在为HHVM编写C++代码提供一种指南,包括了什么时候.怎么使用各种语言功能,以及代码的格式.我们的目标是确保代码持续高可用的同时,还能容易被阅读和参与贡献,尤其是对新人而言. HHV ...

  8. c++ 匹配A容器中最先出现的b容器中的元素,返回iterator,(find_first_of)

    #include <iostream> // std::cout #include <algorithm> // std::find_first_of #include < ...

  9. 精通移动app测试实战

  10. gulp4小demo

    本来想着用gulp搭建一个自动化构建工具,结果一顿报错,后来发现我重新安装的gulp版本是4.0.0,与3版本还是不太一样的,遂记之. Gulp 3版本Demo: const gulp = requi ...