BZOJ-1001: [BeiJing2006]狼抓兔子 (C++代码)

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1001

终于在无数次提交后AC了这道题,平面图最大流转最短路来解答,然后用DIJSTRA或者SPFA求解即可。(注意n或m为1的情况!!!!!)

代码:

#include 

#include 

#include 

#include 

   

using namespace std;

   

#define MAXN 1001

#define MAXV 3000100

   

int v[MAXN][MAXN][2];

int n,m,z=0;

   

struct node {

    node *next;

    int t,d;

};

   

node *head[MAXV];

   

void INSERT(int s,int t,int d){

    node *p=new(node);

    (*p).t=t;

    (*p).d=d;

    (*p).next=head[s];

    head[s]=p;

}

   

int dist[MAXV];

int S,T;

bool f[MAXV];

   

struct cmp{

    bool operator()(int x,int y){

        return dist[x]>dist[y];

    }

};

   

priority_queue,cmp>q;

   

int spfa(){

    dist[S]=0;

    q.push(S);

    while (!q.empty()){

        int v=q.top();

        q.pop();

        if (!f[v]){

            continue;

        }

        f[v]=false;

        if (v==T){

            return dist[T];

        }

        node *p=head[v];

        while (p!=NULL){

            if (dist[(*p).t]>dist[v]+(*p).d){

                dist[(*p).t]=dist[v]+(*p).d;

                f[(*p).t]=true;

                q.push((*p).t);

            }

            p=(*p).next;

        }

    }

    return dist[T];

}

   

int main(){

    scanf("%d%d",&n,&m);

    if (n==1||m==1){

        int ans=0x7fffffff,x=0;

        for (int i=0;i++

你可能感兴趣的:(BZOJ-1001: [BeiJing2006]狼抓兔子 (C++代码))