BZOJ-3175: [Tjoi2013]攻擊裝置(flood fill+最大流)

題目:http://www.lydsy.com/JudgeOnline/problem.php?id=3175

很經(jīng)典的一道騎士共存問題洗出,直接Flood fill之后網(wǎng)絡(luò)流即可骏全。

代碼:

#include <cstdio>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
#define MAXN 210
#define inf 0x7fffffff
#define MAXV 50010
 
struct graph {
        
        struct edge {
               edge *next,*pair;
               int t,f;
               edge () {
                       next=pair=NULL;
               }
        } *head[MAXV];
        
        int h[MAXV],gap[MAXV],S,T;
        edge *d[MAXV];
        
        graph () {
               memset(head,0,sizeof(head));
        }
        
        void Add(int s,int t,int f) {
               edge *p=new(edge);
               p->t=t,p->f=f,p->next=head[s];
               head[s]=p;
        }
        void AddEdge(int s,int t,int f) {
               Add(s,t,f),Add(t,s,0);
               head[s]->pair=head[t],head[t]->pair=head[s];
        }
        
        int sap(int v,int flow) {
               if (v==T) return flow;
               int rec=0;
               for (edge *p=d[v];p;p=p->next) if (h[v]==h[p->t]+1&&p->f) {
                       int ret=sap(p->t,min(flow-rec,p->f));
                       p->f-=ret,p->pair->f+=ret,d[v]=p;
                       if ((rec+=ret)==flow) return flow;
               }
               if (!(--gap[h[v]])) h[S]=T;
               gap[++h[v]]++,d[v]=head[v];
               return rec;
        }
        
        int maxflow() {
               memset(h,0,sizeof(h));
               memset(gap,0,sizeof(gap));
               gap[S]=T;
               for (int i=0;i++<T;) d[i]=head[i];
               int flow=0;
               while (h[S]<T) flow+=sap(S,inf);
               return flow;
        }
} g;
 
const int dir[8][2]={{-1,2},{1,2},{-1,-2},{1,-2},{2,-1},{2,1},{-2,-1},{-2,1}};
 
int v[MAXN][MAXN],n,map[MAXN][MAXN],V=0,sum=0;
bool f[MAXN][MAXN];
 
void dfs(int x,int y,bool flag) {
        f[x][y]=false;
        if (flag) g.AddEdge(g.S,v[x][y],1); else g.AddEdge(v[x][y],g.T,1);
        for (int i=0;i<8;i++) {
               int X=x+dir[i][0],Y=y+dir[i][1];
               if (X>0&&X<=n&&Y>0&&Y<=n) {
                       if (!map[X][Y]) {
                               if (flag) g.AddEdge(v[x][y],v[X][Y],1);
                               if (f[X][Y])dfs(X,Y,flag^true);
                       }
               }
        }
}
 
void Init() {
        scanf("%d",&n);
        for (int i=0;i++<n;) {
               char s[MAXN];
               scanf("%s",&s);
               for (int j=0;j<n;j++) {
                       map[i][j+1]=s[j]=='0'?0:1;
                       if (!map[i][j+1]) v[i][j+1]=++V,sum++;
               }
        }
        g.S=++V;
        g.T=++V;
        memset(f,true,sizeof(f));
        for (int i=0;i++<n;) for (int j=0;j++<n;) {
               if (f[i][j]&&map[i][j]==0) {
                       dfs(i,j,true);
               } 
        }
}
 
int main() {
        Init();
        printf("%d\n",sum-g.maxflow());
        return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末签财,一起剝皮案震驚了整個濱河市讹开,隨后出現(xiàn)的幾起案子寄锐,更是在濱河造成了極大的恐慌击蹲,老刑警劉巖毡琉,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件要尔,死亡現(xiàn)場離奇詭異舍杜,居然都是意外死亡,警方通過查閱死者的電腦和手機赵辕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門既绩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人还惠,你說我怎么就攤上這事饲握。” “怎么了蚕键?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵救欧,是天一觀的道長。 經(jīng)常有香客問我锣光,道長笆怠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任誊爹,我火速辦了婚禮骑疆,結(jié)果婚禮上田篇,老公的妹妹穿的比我還像新娘。我一直安慰自己箍铭,他們只是感情好泊柬,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诈火,像睡著了一般兽赁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冷守,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天刀崖,我揣著相機與錄音,去河邊找鬼拍摇。 笑死亮钦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的充活。 我是一名探鬼主播蜂莉,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼混卵!你這毒婦竟也來了映穗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幕随,失蹤者是張志新(化名)和其女友劉穎蚁滋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赘淮,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡辕录,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梢卸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踏拜。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖低剔,靈堂內(nèi)的尸體忽然破棺而出速梗,到底是詐尸還是另有隱情,我是刑警寧澤襟齿,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布姻锁,位于F島的核電站,受9級特大地震影響猜欺,放射性物質(zhì)發(fā)生泄漏位隶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一开皿、第九天 我趴在偏房一處隱蔽的房頂上張望涧黄。 院中可真熱鬧篮昧,春花似錦、人聲如沸笋妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽春宣。三九已至酵颁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間月帝,已是汗流浹背躏惋。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚷辅,地道東北人簿姨。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像簸搞,于是被迫代替她去往敵國和親扁位。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Getting Started Use the Current Stable Version (7.1) Buil...
    Leonzai閱讀 1,947評論 0 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,144評論 25 707
  • 相信每一位玩ACM程序設(shè)計競賽的同學來說惋鹅,都有一個從入門到精通的過程则酝,而且分享他們經(jīng)驗的時候,見到最多的就是一種合...
    FinlayLiu閱讀 5,378評論 6 182
  • 每一場大雨后闰集,我最喜歡做的事情就是去散步沽讹,呼吸新鮮的空氣,感受自然的美武鲁。 今天下午又是一場大雨爽雄,先是在窗邊聽雨聲,...
    愛聞墨的書蟲閱讀 1,155評論 5 8
  • 有一只貓愛上了唐可昕的貓薄荷沐鼠。 貓一不小心挚瘟,跟唐可昕的貓薄荷來了個親密接觸。:“哎呦饲梭,一片葉子掉了下來乘盖,...
    西子湖畔的雪閱讀 409評論 0 2