GDOI2016模擬8 15安全監控

2021-07-04 14:55:23 字數 1509 閱讀 5558

題目

選舉越來越近了,所以**amabo kcarab準備在美國計畫一次旅行,並在wdc和la進行演講。特務為了能夠保護**的安全,需要時刻監控所有**會經過的城市(包括wdc和la)。

當然,為了使預算不會太大,**不會用到af1,而會用汽車作為交通工具。並且,特務計畫在**從wdc到la和回到wdc的旅途中安排盡可能少的需要監控的城市數目。

對於這個問題,我們假設美國有n個城市,標號為1到n,和m條單向的連線兩個不同城市的州際公路。wdc的編號為1,la的編號為2。

寫乙個程式計算出最少需要被監控的城市,使得有一條路只經過被監控的城市,可以從wdc到la,最後回到wdc。

注意:測試資料保證有解。

n,m(2<=n<=100,2<=m<=200),分別表示城市的數目和州際公路的數目。

這題注意到n比較小、m也比較小

我就想著先用floyd來跑出每個點對間的最短路,然後若i能到j,j能到i,則記錄下點對(i,j),令leni,j為其正反最短路之和,那麼leni,j為i到j再到i的答案上界。

但還不夠,我們用堆來從小到大做,若存在leni,j、lenj,k、leni,k且leni,j+lenj,k-1<leni,k則更新leni,k,相當於兩個環公用了乙個點,只算一次。

這樣可以處理出相對較優的答案上界,這時候可以暴力(注意,每個點最多經2次),用最優性剪枝,就可以過了

貼**

#include

#include

#include

#include

using

namespace

std;

#define n 101

int n,m,top,ans,s,t;

int dis[n][n],f[n*n][2],bz[n][n],g[n],a[n*4][2];

int bz1[n];

void ins1(int x,int y)

void init()

}void swap(int x,int y)

bool jian(int x,int y)

void up(int x)

void down(int x)

}void ins(int x,int y)

void del()

void pre()

void did(int x,int y,int xx,int yy,int ***,int yyy)

}void dfs(int x,int y,bool p)

if (ans<=y)

return;

if (x==s&&bz1[x]!=1)

for (int i=g[x];i;i=a[i][1])

if (bz1[a[i][0]]!=2)

}void work()

}ans=dis[1][2];

s=1,t=2;

bz1[1]=1;

dfs(1,1,0);

}void write()

int main()

GDOI2016模擬8 15蜘蛛俠

題目 話說世界上有很多超級英雄 蝙蝠俠,蜘蛛俠,超人,名字都寫不出來的人等等。在他們之中有乙個叫kickass。今天他想模仿蜘蛛俠,所以他選擇了一排高樓來跳。具體來說,他選擇了一列n幢高樓,從左到右標號為1到n。一開始他在第k幢高樓。不幸的是,kickass能力非常有限,只能跳到向左或向右相鄰的高樓...

GDOI2016模擬8 8旋轉

alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...

GDOI2016模擬8 13總結

這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...