首页 > 其他分享 >狼抓兔子

狼抓兔子

时间:2022-12-19 18:55:07浏览次数:59  
标签:int wi else 兔子 now id dis

狼抓兔子

思路

将面看成点,然后将边转换成面和面之间的边,然后跑一遍最短路,就可以了。
但是具体那个是起点,那个是终点,是这么进行确定的,我还不太确定。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M=3e6+5;
using pii=pair<int,int>;

int n,m;
int h[M],ne[M<<1],e[M<<1],w[M<<1],tot=1;
void add(int from,int to,int w1,int w2) {
    e[++tot]=to;  w[tot]=w1;  ne[tot]=h[from];  h[from]=tot;
    e[++tot]=from;w[tot]=w2;  ne[tot]=h[to];    h[to]=tot;
}

int dis[M];
bool vis[M];
int S=M-2,T=M-1;
int dij() {
    memset(dis,0x7f,sizeof(dis));
    dis[S]=0;
    priority_queue<pii>q;
    q.push({0,S});
    while(!q.empty()) {
        int now=q.top().second;
        q.pop();
        if(vis[now])continue;
        vis[now]=1;
        if(now==T)return dis[now];
        for(int i=h[now];i;i=ne[i]) {
            int to=e[i];
            if(dis[to]>dis[now]+w[i])
                dis[to]=dis[now]+w[i],q.push({-dis[to],to});
        }
    }
    return -1;
}

int id(int x,int y) {
    return (x-1)*(m-1)+y;
}

signed main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<m;j++) {
            int wi,x,y;cin>>wi;
            if(i==1)x=S,y=j;
            else if(i==n)x=T,y=id(2*(i-1),j);
            else x=id(2*i-1,j),y=id(2*i-2,j);
            add(x,y,wi,wi);
        }
    for(int i=1;i<n;i++)
        for(int j=1;j<=m;j++) {
            int wi,x,y;cin>>wi;
            if(j==1)x=T,y=id(2*i,j);
            else if(j==m)x=S,y=id(2*i-1,j-1);
            else x=id(2*i-1,j-1),y=id(2*i,j);
            add(x,y,wi,wi);
        }
    for(int i=1;i<n;i++)
        for(int j=1;j<m;j++) {
            int wi;cin>>wi;
            int x=id(2*i,j),y=id(2*i-1,j);
            add(x,y,wi,wi);
        }
    cout<<dij();
    return 0;
}

标签:int,wi,else,兔子,now,id,dis
From: https://www.cnblogs.com/basicecho/p/16992853.html

相关文章

  • P4001 [ICPC-Beijing 2006] 狼抓兔子
    题目链接P4001[ICPC-Beijing2006]狼抓兔子[ICPC-Beijing2006]狼抓兔子题目描述现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的......
  • 【HEOI2015】兔子与樱花(贪心)
    首先想一下题目中的操作如何转化:当一个节点被去掉之后,这个节点上的樱花和它的儿子节点都被连到删掉节点的父节点上。设当前节点为\(u\),\(u\)的父节点为\(fa\),儿子个......
  • [Ynoi2016] 掉进兔子洞
    \(\text{Solution}\)莫队配合\(\text{bitset}\)发现答案困难的部分在于同一个数在三个区间出现次数的最小值考虑强行拆开看,用莫队处理出每个区间每个数的出现次数,这个......
  • 1025模拟赛(兔子场)
    1025模拟赛(兔子场)感谢兔子女王&兔子公主不杀之恩。A「AGC008C」TetrominoTiling题意\(~~~~\)七种俄罗斯方块,已知每种的数量,(按照形状记为\(\text{I,O,T,L,J,S,Z......
  • BZOJ 1001([BeiJing2006]狼抓兔子-最大流转对偶图最短路)
    1001:[BeiJing2006]狼抓兔子TimeLimit: 15Sec  MemoryLimit: 162MBSubmit: 5779  Solved: 1297​​Submit​​][​​Status​​][​​Discuss​​]D......
  • 兔子生崽
    #include<stdio.h>intmain(){ inta=1; intb=1; inti; /*1.//变量可以无限接收值(小技巧 a=a+b; b=a+b; */ /*2.将输出值按规律分行(小......
  • 简笔画~兔子
    •介绍简笔画,兔子。•步骤[captionid="attachment_3435"align="aligncenter"width="268"]​​​​简笔画~兔子1[/caption][captionid="attachment_3436"align="ali......
  • 看到就是赚到!当 LinkedList 不是列表时,速度快的兔子都追不上!
    作者:小姐姐味道ArrayList和LinkedList有什么区别?这种侮辱人的问题,默认就把这两者限定在了同一个场景之中,它甚至连八股文都算不上。一旦你被问到这种问题,也证明面试基本上泡......
  • 统计每个月兔子的总数---牛客网
    统计每个月兔子的总数_牛客题霸_牛客网(nowcoder.com) #include<iostream>usingnamespacestd;intmain(){//112358//这道题本质就是斐波那契......
  • hash の 题(内含兔子与兔子,Hash 键值 (hash))
     Hash键值(hash)【思路】按照正常模拟,很容易写出代码,如图: for(inti=1;i<=q;i++){ intopt; scanf("%d",&opt); if(opt==1){ intx,y,ans=0; scanf("%d%d"......