Graph
题目:
【问题描述】
给你一个有向图,有 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的更多相关文章
- [开发笔记] Graph Databases on developing
TimeWall is a graph databases github It be used to apply mathematic model and social network with gr ...
- Introduction to graph theory 图论/脑网络基础
Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...
- POJ 2125 Destroying the Graph 二分图最小点权覆盖
Destroying The Graph Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8198 Accepted: 2 ...
- [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), ...
- [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), ...
- [LeetCode] Clone Graph 无向图的复制
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...
- 讲座:Influence maximization on big social graph
Influence maximization on big social graph Fanju PPT链接: social influence booming of online social ne ...
- zabbix利用api批量添加item,并且批量配置添加graph
关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...
- Theano Graph Structure
Graph Structure Graph Definition theano's symbolic mathematical computation, which is composed of: A ...
- 纸上谈兵: 图 (graph)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...
随机推荐
- warning C4018: “<”: 有符号/无符号不匹配
原因: 将两个不同的类型进行了比较,如: int a:unsigned short b: if(a>b)... 解决:改为同一种类型
- Linux命令中:rsync和cp之间的区别
rsync:只拷贝那些更新的文件: cp -u:也可以实现类似效果: 两者都基本可以满足备份的需求: 只是一般情况下,用rsync做这类备份之类的事情,更多见: 在备份的操作中,拷贝,过期文件的删除是 ...
- leetcode 最长有效括号
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()&quo ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- 04_kafka python客户端_Producer模拟
使用的python库: kafka-python 安装方式: pip install kafka-python 简单的模拟Producer """ Kafka Produ ...
- 3:JavaScript中的各类语句
上面我们说完了数据类型和基本运算 下面说的就是各种类型的语句 --- ---------------------------------------------------------------- ...
- VSS_01
1.设置 工作目录 右击 CSDRGis --> Set Working Folder.. --> D:\CSDRGis 2.下载 源码 右击 CSDRGis --> Get Las ...
- Myeclise下tomcat启动报错,启动超时
错误截图如下: 大概说的是tomcat7在本地不能在45秒内启动,如果项目需要更多的时间,试着去更改server配置 解决方法: 找到项目工作空间目录下 workspace\.metadata\.pl ...
- URAL 1303 Minimal Coverage
URAL 1303 思路: dp+贪心,然后记录路径 mx[i]表示从i开始最大可以到的位置 sufmx[i]表从1-i的某个位置开始最大可以到达的位置 比普通的贪心效率要高很多 代码: #inclu ...
- Python - PIL-pytesseract-tesseract验证码识别
N天前实现了简单的验证识别,这玩意以前都觉得是高大上的东西,一直没有去研究,这次花了点时间研究了一下,当然只是一些基础的东西,高深的我也不会,分享一下给大家吧. 关于python验证码识别库,网上主要 ...