zoukankan      html  css  js  c++  java
  • BZOJ 4395: [Usaco2015 dec]Switching on the Lights

    4395: [Usaco2015 dec]Switching on the Lights

    Description

    Farmer John has recently built an enormous barn consisting of an N×NN×N grid of rooms (2≤N≤100), numbered from (1,1)up to (N,N). Being somewhat afraid of the dark, Bessie the cow wants to turn on the lights in as many rooms as possible.

    Bessie starts in room (1,1), the only room that is initially lit. In some rooms, she will find light switches that she can use to toggle the lights in other rooms; for example there might be a switch in room (1,1) that toggles the lights in room (1,2)(1,2). Bessie can only travel through lit rooms, and she can only move from a room (x,y)(x,y) to its four adjacent neighbors (x−1,y), (x+1,y), (x,y−1)(x,y−1) and (x,y+1) (or possibly fewer neighbors if this room is on the boundary of the grid).

    Please determine the maximum number of rooms Bessie can illuminate.

    有N*N个房间,组成了一张N*N的网格图,Bessie一开始位于左上角(1,1),并且只能上下左右行走。

    一开始,只有(1,1)这个房间的灯是亮着的,Bessie只能在亮着灯的房间里活动。

    有另外M条信息,每条信息包含四个数a,b,c,d,表示房间(a,b)里有房间(c,d)的灯的开关。

    请计算出最多有多少个房间的灯可以被打开

    Input

    The first line of input contains integers NN and MM (1≤M≤20,000).

    The next MM lines each describe a single light switch with four integers xx, yy, aa, bb, that a switch in room (x,y) can be used to toggle the lights in room (a,b). Multiple switches may exist in any room, and multiple switches may toggle the lights of any room.

    Output

    A single line giving the maximum number of rooms Bessie can illuminate.

    Sample Input

    3 6
    1 1 1 2
    2 1 2 2
    1 1 1 3
    2 3 3 1
    1 3 1 2
    1 3 2 1

    Sample Output

    5

    思路:

      对于这道题,我是瞎搞的,每次BFS处理当前能到达的房间并且开灯(用挂链的形式开灯)强制BFS1000次(每次q,empty()了就把(1,1)压进去再BFS)。就AC啦

    话说这种方法我总用呢,手动滑稽

    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int map[111][111];
    bool vis[111][111];
    int head[111*111],to[21000],next[21000],cnt;
    int movx[4]={1,-1,0,0};
    int movy[4]={0,0,1,-1};
    struct node {
        int x,y;
    };
    void add_edge(int a,int b) {
        to[++cnt]=b;
        next[cnt]=head[a];
        head[a]=cnt;
    }
    queue<node>q;
    int n;
    int main() {
        int m;
        map[1][1]=1;
        scanf("%d%d",&n,&m);
        while(m--) {
            int a,b,c,d;
            scanf("%d%d%d%d",&a,&b,&c,&d);
            add_edge((a-1)*n+b,(c-1)*n+d);
        }
        
        int tt=1000;
        while(tt--) {
            memset(vis,0,sizeof vis);
            q.push((node){1,1});
            vis[1][1]=0;
            while(!q.empty()) {
                node u=q.front();
                q.pop();
                int xx=u.x,yy=u.y;
                for(int i=head[(xx-1)*n+yy];i;i=next[i]) {
                    int po=to[i];
                    int h,l;
                    if(!po%n) {
                        h=po/n;
                        l=n;
                    }
                    else {
                        h=po/n+1;
                        l=po-(h-1)*n;
                    }
                    if(l==0)h--,l=n;
                    map[h][l]=1;
                }
                for(int i=0;i<4;i++) {
                    int tx=xx+movx[i],ty=yy+movy[i];
                    if(map[tx][ty]&!vis[tx][ty]) {
                        q.push((node){tx,ty});
                        vis[tx][ty]=1;
                    }
                }
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=n;j++) {
                if(map[i][j])ans++;
            }
        }
        printf("%d
    ",ans);
    }
    
  • 相关阅读:
    CEF(Chromium Embedded Framework)使用说明书
    2.CEF常用接口类拦截请求回调函数
    CEF(Chromium Embedded Framework和JavaScript交互相互调用函数和设置数据
    CefV8Value类实现定JavaScript数据类型、数组、对象
    CEF(Chromium Embedded Framework)进程间通讯
    scikit_learn分类器详解
    3.Scikit-Learn实现完整的机器学习项目
    TCP/IP_网络基础知识
    零基础学习python_爬虫(53课)
    安全测试8_Web安全实战3(命令注入)
  • 原文地址:https://www.cnblogs.com/Tobichi/p/9107813.html
Copyright © 2011-2022 走看看