zoukankan      html  css  js  c++  java
  • [Baltic 2011]Lamp BZOJ2346

    分析:

    建图最短路,比较裸。

    我们可以考虑,如果是‘’那么,左上连右下边权为0,左下连右上边权为1,反之亦然。

    卡裸spfa,加点优化能过,我就直接改成的堆优化Dijkstra

    附上代码:

    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <queue>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    #define N 505
    #define M 505550
    struct node{int to,next,val;}e[M<<1];
    int head[M],cnt,vis[M],dis[M],n,m,map[N][N],tot;
    char s[N];
    void add(int x,int y,int z){e[cnt].to=y;e[cnt].next=head[x];e[cnt].val=z;head[x]=cnt++;}
    int Dijkstra()
    {
    	memset(dis,0x3f,sizeof(dis));
    	dis[1]=0;
    	priority_queue <pair<int,int> >q;
    	q.push(make_pair(-dis[1],1));
    	while(!vis[tot]&&!q.empty())
    	{
    		int x=q.top().second;q.pop();
    		if(vis[x])continue;
    		vis[x]=1;
    		for(int i=head[x];i!=-1;i=e[i].next)
    		{
    			int to1=e[i].to;
    			if(dis[to1]>dis[x]+e[i].val)
    			{
    				dis[to1]=dis[x]+e[i].val;
    				q.push(make_pair(-dis[to1],to1));
    			}
    		}
    	}
    	return dis[tot];
    }
    int main()
    {
    	memset(head,-1,sizeof(head));
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n+1;i++)
    	{
    		if(i!=1)scanf("%s",s+2);
    		for(int j=1;j<=m+1;j++)
    		{
    			map[i][j]=++tot;
    			if(i!=1&&j!=1)
    			{
    				if(s[j]==92)
    				{
    					add(map[i-1][j-1],map[i][j],0);
    					add(map[i][j],map[i-1][j-1],0);
    					add(map[i][j-1],map[i-1][j],1);
    					add(map[i-1][j],map[i][j-1],1);
    				}else
    				{
    					add(map[i-1][j-1],map[i][j],1);
    					add(map[i][j],map[i-1][j-1],1);
    					add(map[i][j-1],map[i-1][j],0);
    					add(map[i-1][j],map[i][j-1],0);
    				}
    			}
    		}
    	}
    	int t=Dijkstra();
    	if(t==0x3f3f3f3f)puts("NO SOLUTION");
    	else printf("%d
    ",t);
    	return 0;
    }
    

      

  • 相关阅读:
    聪明人 & 普通人
    13种模型及方法论
    面向大规模商业系统的数据库设计和实践
    分治算法
    软件架构
    隐含前提思维模型
    Git回滚代码到某个commit
    使用arthas排查 test 问题
    Arthas
    docker 操作入门
  • 原文地址:https://www.cnblogs.com/Winniechen/p/9095460.html
Copyright © 2011-2022 走看看