《隨機題庫練習10》G

2021-10-05 12:51:00 字數 1791 閱讀 4369

思路:

看題就想到了拓撲.

但是由於這裡可以同時進行多個安裝.所以我先跑了一次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...