題目
選舉越來越近了,所以**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 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...