题目:

【问题描述】

给你一个有向图,有 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学习笔记比较全

    注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法 Python的特色 1.简单 2.易学 3.免费.开源 4.高层语言: 封装内存管理等 5.可移植性: 程序如果避免使用依赖于系统的特性 ...

  2. excel在msdn上的说明文档

    Microsoft.Office.Tools.Excel.Worksheet 对象提供和 Excel 主互操作程序集中的 Microsoft.Office.Interop.Excel.Workshee ...

  3. Java 类引入 学习记录规整

    之前觉得声明一个类,再把另一个包内的声明数值用第一个类打印出来就可以了(加入引入包类) 结果发现是不对的 看了看demo  得出正确结果    ImportTest 被运行 引入下面的Import类 ...

  4. HDU 1548 A strange lift (Dijkstra)

    https://vjudge.net/problem/HDU-1548 题意: 电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能低于一层或高于n层,给定起点与终点 ...

  5. H5图片预览、压缩、上传

    目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!- ...

  6. Ubuntu 关闭防火墙

    关闭防火墙:service iptables stop

  7. 转载:oracle 11g ADG实施手册(亲测,已成功部署多次)

    https://www.cnblogs.com/yhfssp/p/7815078.html 一:实验环境介绍 虚拟机系统: RHEL Linux 6.4(64位) 数据库版本: Oracle 11gR ...

  8. 《剑指offer》第十四题(剪绳子)

    // 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...

  9. Codeforces 197D - Infinite Maze

    197D - Infinite Maze 思路:bfs,如果一个点被搜到第二次,那么就是符合要求的. 用vis[i][j].x,vis[i][j].y表示i,j(i,j是取模过后的值)这个点第一次被搜 ...

  10. NHibernate 映射关系

    基本映射关系如下: NHibernate类型 .NET类型 Database类型 备注 AnsiChar System.Char DbType.AnsiStringFixedLength - 1 ch ...