思路:
看題就想到了拓撲.
但是由於這裡可以同時進行多個安裝.所以我先跑了一次dfs.(果然超時了).
首先這個答案肯定是有向邊的最長邊集的長度。(邊的長度為安裝時間)。
那麼如果直接上拓撲,記錄安裝到每乙個點的時間,然後通過前驅點不斷轉移。
這樣是不行的.因為可能會存在多個前驅點。
我們需要取最長的前驅點作為開始安裝的點,也就是說當我們入度刪到0時,此時的前驅點應該是所有前驅點裡安裝到的時間最大的(因為可以同時進行多個安裝)。所以我們採用優先佇列來存點,並且引入安裝時間來排序。保證了入度為0時的前驅點肯定是安裝時間最大的這一條件.
#include
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n =
105;
const
int mod =
1e6;
#define pi acos(-1)
#define inf 1e8
#define inm int_min
#define pb(a) push_back(a)
#define mk(a,b) make_pair(a,b)
#define dbg(x) cout << "now this num is " << x << endl;
#define met0(axx) memset(axx,0,sizeof(axx));
#define metf(axx) memset(axx,-1,sizeof(axx));
#define sd(ax) scanf("%d",&ax)
#define sld(ax) scanf("%lld",&ax)
#define sldd(ax,bx) scanf("%lld %lld",&ax,&bx)
#define sdd(ax,bx) scanf("%d %d",&ax,&bx)
#define sddd(ax,bx,cx) scanf("%d %d %d",&ax,&bx,&cx)
#define sfd(ax) scanf("%lf",&ax)
#define sfdd(ax,bx) scanf("%lf %lf",&ax,&bx)
#define pr(a) printf("%d\n",a)
#define plr(a) printf("%lld\n",a)
int in[
1005
],t[
1005
],arr[
1005
],ans;
vector<
int> g[
1005];
intmain()
priority_queue
,greater
> q;
for(
int i=
1;i<=n;
++i)
}while
(!q.
empty()
)}}int ans =-1
;for
(int i=
1;i<=n;
++i) ans =
max(ans,arr[i]);
pr(ans)
;system
("pause");
return0;
}
《隨機題庫練習10》D
hdu4166的乙個高階版吧.思路 首先聯想到bfs的性質.當我們搜素到 x,y 點時,那麼這時的距離一定是到這個點最短的距離.對於到x點的最短距離,可能會存在多個點到它的距離滿足到x的最短距離.但是這樣的情況只是說明最短的路徑很多,但是到x點的最短距離肯定是不變的.因為從x y的最短路徑肯定是優於...
Oracle控制檔案 10g
作用 二進位制檔案 記錄了資料庫當前例項的結構和行為,資料檔案日誌檔案的資訊,維護資料庫一致性 引數檔案中定義了控制檔案的位置和大小 很小的二進位制檔案,一般不超過100m mount階段open以後,一直在用 一套控制檔案只能連線乙個database 分散放置,至少乙份,至多八份 相關檢視 v c...
10g以上expdp impdp命令
exp imp已經很好用了,但是唯一的確定是速度太慢,如果1張表的資料有個百千萬的,常常匯入匯出就長時間停在這個表這,但是從oracle 10g開始提供了稱為資料幫浦新的工具expdp impdp,它為oracle資料提供高速並行及大資料的遷移。imp exp可以在客戶端呼叫,但是expdp imp...