poj 3592 缩点+SPFA

记录:rk3568适配开源GPU驱动(panfrost) 摘要:本文介绍了在RK3568芯片上移植Mali-G52 GPU驱动的过程。主要包括内核dts文件修改和内核配置调整两部分。 阅读详情

题意:给出一个矩阵,其中#代表墙,不可走,0-9代表权值,*代表可以选择传送。求从0,0点开始出发能获得最大权值。

 

思路:因为*的出现会有环的情况,先建图连边,将环进行Tarjan缩点,之后再从0,0用SPFA找最长路就行了。

 

麻烦的地方在于建图,还有各种错

 

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 1605
#define MAXM 1605*1605
#define inf 10000000
int map[MAXN][MAXN],DFN[MAXN],Low[MAXN],vis[MAXN];
int stack[MAXM],instack[MAXN],Belong[MAXN],a[MAXN],b[MAXN];
int que[1605*MAXN],sign[1605*MAXN],dis[1605*MAXN],head[1605*MAXN],val[1605*MAXN];
int G[MAXN][MAXN];
char g[50][50];
int kt,n,m,count1,scnt,top,tot;
struct Edge
{
    int to,next;
}edge[MAXM];
void addedge(int v,int w)
{
    edge[tot].to=w;
    edge[tot].next=head[v];
    head[v]=tot++;
}
void SPFA(int s)
{
    memset(sign,false,sizeof(sign));
    for(int i=1;i<=scnt;i++)
    {
        dis[i]=0;
    }
    int l,r;
    l=r=0;
    que[r++]=s;
    sign[s]=true;
    dis[s]=val[s];
    while(l!=r)
    {
        int v=que[l++];
        sign[v]=true;
        for(int i=head[v];i!=-1;i=edge[i].next)
        {
            int j=edge[i].to;
            if(dis[j]<=dis[v]+val[j])
            {
                dis[j]=dis[v]+val[j];
                if(!sign[j])
                {
                    sign[j]=true;
                    que[r++]=j;
                }
            }
        }
        sign[v]=false;
    }
}
void Tarjan(int v)
{
    instack[v]=1;
    stack[top++]=v;
    DFN[v]=Low[v]=++count1;
    for(int i=0;i<n*m;i++)
    {
        if(map[v][i]==1)
        {
            if(!DFN[i])
            {
                Tarjan(i);
                Low[v]=min(Low[v],Low[i]);
            }
            else if(instack[i]==1)
            {
                Low[v]=min(Low[v],DFN[i]);
            }
        }
    }
    int t;
    if(DFN[v]==Low[v])
    {
        scnt++;
        do
        {
            t=stack[--top];
            instack[t]=0;
            Belong[t]=scnt;
        }while(t!=v);
    }
}
void dfs(int x,int y)
{
    vis[x*m+y]=1;
    if(g[x][y]=='#')
        return ;

    if(g[x][y]>='a'&&g[x][y]<='a'+kt)
    {
        int t=g[x][y]-'a';
        if(!map[x*m+y][a[t]*m+b[t]]&&x*m+y!=a[t]*m+b[t])
        {
            map[x*m+y][a[t]*m+b[t]]=1;
            if(!vis[a[t]*m+b[t]])
            dfs(a[t],b[t]);
        }
    }
    if(x+1<n&&g[x+1][y]!='#')
    {
        if(!map[x*m+y][(x+1)*m+y])
        {
            map[x*m+y][(x+1)*m+y]=1;
            if(!vis[(x+1)*m+y])dfs(x+1,y);
        }
    }
    if(y+1<m&&g[x][y+1]!='#')
    {

        if(!map[x*m+y][x*m+y+1])
        {
            map[x*m+y][x*m+y+1]=1;
            if(!vis[x*m+y+1])dfs(x,y+1);
        }
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(g,'\0',sizeof(g));
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            scanf("%s",g[i]);
        }
        kt=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(g[i][j]=='*')
                    {
                        kt++;
                        g[i][j]='a'+kt;
                    }
            }
        }
        for(int i=1;i<=kt;i++)
        {
            scanf("%d%d",&a[i],&b[i]);
        }
        memset(map,0,sizeof(map));
        memset(vis,0,sizeof(vis));
        dfs(0,0);
        memset(DFN,0,sizeof(DFN));
        memset(instack,0,sizeof(instack));
        memset(stack,0,sizeof(stack));
        memset(Low,0,sizeof(Low));
        memset(Belong,0,sizeof(Belong));
        count1=scnt=top=0;
        Tarjan(0);
        memset(val,0,sizeof(val));
        for(int i=0;i<n*m;i++)
        {
            if(g[i/m][i%m]<='9'&&g[i/m][i%m]>='0')
            {
                val[Belong[i]]+=g[i/m][i%m]-'0';
            }
        }
        tot=0;
        memset(head,-1,sizeof(head));
        memset(G,0,sizeof(G));
        for(int i=0;i<n*m;i++)
        {
            for(int j=0;j<n*m;j++)
            {
                if(map[i][j]&&Belong[i]!=Belong[j])
                {
                    if(!G[Belong[i]][Belong[j]])
                    {
                        addedge(Belong[i],Belong[j]);
                        G[Belong[i]][Belong[j]]=1;
                        //cout<<Belong[i]<<','<<Belong[j]<<endl;
                    }

                }
            }
            //cout<<Belong[i]<<' ';
        }
        SPFA(Belong[0]);
        int ans=0;
        for(int i=1;i<=scnt;i++)
        {
            if(dis[i]>ans)
                ans=dis[i];
        }
        printf("%d\n",ans);
    }
    return 0;
}
/*
100
2 2
**
*9
0 1
0 1
0 0
*/


 

开源数字人、虚拟直播部署教程 对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。 阅读详情

相关推荐

保姆级教程:在Ubuntu 20.04上搞定PX4飞控与T265的视觉定位(附避坑指南)

本文提供在Ubuntu 20.04上配置PX4飞控与T265视觉定位系统的详细教程,涵盖驱动安装、ROS与MAVROS桥接、PX4参数调优及故障排查。通过实测验证的步骤和避坑指南,帮助开发者实现厘米级精度的视觉定位,特别适合室内无人机应用。

weixin_29038155的博客 248

poj3592--Instantaneous Transference(强连通缩点+spfa)

poj3592:题目链接 题目大意:给出n*m的矩阵,其中数字代表矿物的数量,#代表不可达,*代表传送门,传送到给定的位置。问最多可以收集多少矿物(每个矿物只能被收集一次,可以经过多次) 因为存在传送门,所以就会形成环,用强连通将形成环的缩成一个点,记录每个点代表的矿物数,最后用spfa找出最长路,也就是可以得到的最多的矿物数。(不会出现矩阵外的点) #include #include

随风的专栏 952

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

POJ 3592(强连通缩点,拓扑最长路)

题意:      n*m矩阵,*表示传送门,矩阵后面给出其到达的点,#障碍点,不可到达,数字表示该点的宝藏数,每个点可以往下或者往右走,获得宝藏后该点宝藏数变为0,问最多能获得多少宝藏。 思路:    建图+强连通缩点+拓扑dp。 难点:    构图:#点不可做为起点也不可以作为终点。总共n*m个点,标号别和其他量弄混。    强连通缩点:只对“1”所处的块tarjan即可,拓扑序同理...

又菜又爱玩 297

2021-03-08 使用SPDK部署NVMe over TCP

NVMe-oF Target入门指南 SPDK NVMe over Fabrics Target是一个用户空间应用程序,通过以太网,Infiniband或光纤通道等结构呈现块设备,SPDK目前支持RDMA和TCP传输。 本文将在已经编译好SPDK的基础上演示如何使用SPDK搭建NVMe over TCP,前提是您已经将一块NVMe硬盘挂载到linux系统中。 如果您想获取有关SPDK更详细的信息,请参考 官方文档。 演示过程的Host主机的ip地址是192.168.0.21,Target主机的ip地址是19

Pancras的博客 2843

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

Instantaneous Transference POJ - 3592

点击打开链接 因为图中每一个点被访问过后权值就消失了 所以不能用最短路直接求 先缩点 然后得一DAG图 求最长路即可 if语句后边多了一个分号 调了一晚上 真的舒服 #include &lt;cstdio&gt; #include &lt;queue&gt; #include &lt;stack&gt; #include &lt;cstring&gt; #include &lt;algor...

sunyutian1998的博客 259

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1877

poj 3352(桥+缩点)

先求出桥,然后去除桥后得到边双联通分量, 将边联通分量缩成一个点, 然后就出所有度为1的点(叶子节点)个数n,答案就是n/2+n%2.      #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace std; #define N 5050 #def...

weixin_34343000的博客 210

组态王|以一定的时间间隔查询某个时间段内的历史数据

使用该函数其他都可以满足,唯一问题是变量的选择,当切换站点后查询历史数据时,所选的变量依然是上次站点查询时所选择的变量,每当更换站点查询时都需要重新选择变量,这一点太繁琐,是用户和操作者无法忍受的。但是由于现场可能数据变化并非太过频繁,想要实现记录频率不变,还是以1分钟一次的频率进行存储,但是报表查询的时候想要只显示整点的数据。其中日历控件的设置与之前的历史数据查询是一样的,报表的抬头设置都是不用变的,此处不再赘述,有兴趣的可以。以上为组态王中以一定的时间间隔查询某个时间段内的历史数据的实现过程。

做有价值的事,积累有价值的笔记! 2544

Docker小白也能搞定!5分钟用calibre-web搭建私人Kindle书库(附静读天下配置)

本文为零基础用户提供了一份详尽的指南,介绍如何利用Docker容器技术,在5分钟内快速部署Calibre-Web服务,从而搭建一个完全私有的个人Kindle书库。教程涵盖了从Docker安装、Calibre-Web一键部署、书籍元数据管理到移动端配置的全流程,并重点讲解了如何与安卓端知名阅读应用“静读天下”联动,实现跨设备无缝访问,打造媲美在线书城的个性化阅读体验。

weixin_29216957的博客 541

POJ3592 Instantaneous Transference题解

题意:   给一个矩形,矩形中某些点有一定数量的矿石,有些点为传送点,有些点为障碍。你驾驶采矿车(ore-miner truck,我也不知道是什么),从左上角出发,采尽量多的矿石,矿石不可再生。不能往左边或者上面走。传送点可以往左边或上面传。2<=n,m<=40 分析:   可以把矩形看作一张图,每个格子为一个点,每个格子与它右边和下面的点连接一条有向边。每个传送点与它...

weixin_30466421的博客 129

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

POJ 3592 缩点加spfa

缩点的最大好处在于把一个杂乱无章的有向图变成一个有向无环图, 而在有向无环图中,有两种点比较特殊:一种是入度为 0 的点,另一种是 出度为 0 的点。我们把入度为0的点就叫做根,出度为0的点叫做叶子!题意:一辆坦克从N*M矩阵的左上角出发,每次往右或往下走一格,每格可以是’#’(表示不可以走),’*’表示传送门,或者是数字,表示在该格可以获得的值(只能取一次),传送门可以将到达该处的坦克传送到指定位

yp_2013的博客 379

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

poj3592 tarjan缩点+spfa

因为存在*,所以可以会构成强连通量,所以先将图缩点,然后将

wishcxz_acm 551

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

poj 3592 Instantaneous Transference 【SCC +缩点 + SPFA】

Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6204   Accepted: 1389 Description It was long ago when we played the game Red Aler

世界很大 863

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POJ 3592 Instantaneous Transference

POJ 3592 Instantaneous Transferencetargan,spfa 传送门:HustOJ 传送门:POJ 题意一个N*M的矩阵,矩阵内每点可能是数字1~9:表示这点有数字个矿石,可能是*,表示这点是个超时空传送点,矩阵结束后按顺序给出传送点的传送目的地坐标,可能是#:表示该点不可达。任何矿石点可以到达其右侧点或下侧点,只要右或下点不是#;传送点也可以到其右或下

P.H.S 286

I - Instantaneous Transference POJ - 3592 ,spfa求最长路+tarjan缩点

I - Instantaneous Transference  POJ - 3592  It was long ago when we played the game Red Alert. There is a magic function for the game objects which is called instantaneous transfer. When a

SUNSET 370

POJ3592 Instantaneous Transference【强连通分量】【最长路】

题目大意: 有一个N*M的矩阵地图,矩阵中用了多种字符代表不同的地形,如果是数字X(0~9),则表示 该区域为矿区,有X单位的矿产。如果是"*",则表示该区域为传送点,并且对应唯一一个目标 坐标。如果是"#",,则表示该区域为山区,矿车不能进入。现在矿车的出发点在坐标(0,0)点。 并且(0,0)点一定不是"#"区域。矿车只能向右走、向下走或是遇到传送点的时候可以传送到 指定位置。那么问题来了:矿车最多能采到多少矿。 思路: 如果把N*M个矩阵单位看做是N*M个点,编号为0~N*M。然后从一个坐标到另一个

程序员充电站(itcharge) 2267

POJ 3592 Instantaneous Transference (强连通分量 缩点 spfa最长路)

POJ 3592题目大意在一个N*M的地图上(2≤N,M≤40)(2\le N,M\le 40),每个格子有三种情况: X:表示这个地方有X个金币 *:这个地方是一个虫洞,可以瞬移到另一个地方(会给出瞬移到哪个地方),也可以选择不瞬移 #:这个地方是石头不能走 现在从左上角出发,每一步只能往右或下走,问最多能得到多少金币分析首先容易想到的是将这个矩形地图转化成有向图的问题。那

AIDreamer 450

Poj 3592 Instantaneous Transference【强连通Tarjan+染色缩点+SPFA】

Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6367   Accepted: 1439 Description It was long ago when we played

mengxiang000000 722

poj 3592(强连连通分量+缩点+重建图形+spfa求最长路)

感觉这道题很水,虽然过的人不多,觉得很恶心,思路还是懂得,但写的时候很麻烦,主要是代码的功底不好,,,,这题可以练代码量。自己写了你才懂得的,搞了半天,,,, 回正题:给出一个n*m的矩阵,每个格子可能放有0~9,#,*。0~9代表金矿的数量,#代表阻碍,不能够走,*代表传送点,可以瞬间传送到特定的位置,对于传送点的传送功能可以无限使用,也可以不用。初始时你开着一辆坦克在最左上角,

Weiguang_123的专栏 1883

POJ 3592--Instantaneous Transference【SCC缩点新建图 && SPFA求最长路 && 经典】

Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6177   Accepted: 1383 Description It was long ago when we played the game Red Al

_阿阿阿阿欢 1661

POJ 3592 Instantaneous Transference(强联通分量 Tarjan)

http://poj.org/problem?id=3592 题意 :给你一个n*m的矩阵,每个位置上都有一个字符,如果是数字代表这个地方有该数量的金矿,如果是*代表这个地方有传送带并且没有金矿,可以传送到指定的位置,如果是#代表该位置不可走,初始位置在左上角,只能向下或向右走,并且走到传送带的时候可选择是否传送。问当走出去的时候能获得的最大近况数是多少。 思路 :先将二维矩阵转化成一维的点建...

weixin_30335353的博客 103

poj 3592 Instantaneous Transference tarjan缩点 最长路 ++tarjan模版 && spfa最长路模版

/* 题意:给定一个矩阵,西南角为起点,每个单元都有一定价值的金矿(#表示岩石,不可达,*表示时空门,可以到达指定单元) 现在要求得最多可以获得多大利益 题解:强联通分量,最长路;如果没有时空门,就是纯粹的有向无环图的最长路了,现在出现时空门了,只要求强联通分量进行

Join Hands 1583

poj 3592 Instantaneous Transference (借助强连通分量求缩点在建图spfa求最长路)

题目链接:http://poj.org/problem?id=3592 Description It was long ago when we played the game Red Alert. There is a magic function for the game objects which is called instantaneous transfer. When an

Vision 482
上一篇: hdu2546 01背包 重学背包
下一篇: poj 2063完全背包
小狐狸jun
博客等级 码龄15年 12粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值