前往大都會

2022-06-23 23:09:18 字數 2855 閱讀 3152

簡單的圖論題。

第一問顯然答案是最短路。

第二問中,由於有旅行路程最短的限制,旅行的過程一定在最短路dag上。

建立最短路dag。(dag的條件非常重要)

每條鐵路會被不在最短路dag上的所有邊分割成若干個片段。

考慮dp,設\(f_i\)表示從源點到達\(i\)的最小代價。

可以列舉\(i\)所在的所有鐵路線上的點\(j\)進行轉移。

把被分割的鐵路線進行字首和,設為\(s\)。

則\(f_i=\min(f_j+(s_i-s_j)^2)\)

直接做時間複雜度是\(o(n^2)\)的。

73分**如下:

#includeusing namespace std;

#define int long long

#define n 1000010

int n,m,h[n],w[n*2],v[n*2],nxt[n*2],ec,d[n],vi[n],tp,st[n],du[n],ct,cc,cv,po[n],ii[n];

struct nn;

struct hl;

int operator <(nn x,nn y)

priority_queueq;

queuetq;

vectors[n],t[n],g[n],vt[n],p[n],id[n];

void dij());

for(int i=2;i<=n;i++)

d[i]=1e18;

while(!q.empty()));

} }}

void tt() }}

void dd()

c++;

} }}void add(int x,int y,int z)

signed main()

scanf("%lld",&a);

g[i].push_back(a);

} for(int i=1;i<=m;i++)

for(int j=0;j+1但是發現\(f_j+(s_i-s_j)^2=f_j+s_i^2-2*s_i*s_j+s_j^2=(s_i^2)+(-2s_i)s_j+(f_j+s_j^2)\)

後面是直線方程,顯然可以使用凸包維護。

維護\(m\)個凸包,按照拓撲序列舉當前點。

列舉當前點所在鐵路(設為陣列\(a\)),在\(a\)對應的凸包上查詢得到當前點的\(f\)

然後把查詢得到結果插入\(a\)對應的凸包中。

由於\(s\)是單調遞增的,所以可以線性維護凸包。

時間複雜度\(o(m\log_2n)\),瓶頸在最短路。

#includeusing namespace std;

#define int long long

#define n 1000010

int n,m,h[n],w[n*2],v[n*2],nxt[n*2],ec,d[n],vi[n],tp,st[n],du[n],ct,cc,cv,po[n],ii[n];

struct nn;

struct noa[n];

int va(no x,int y)

int cp(no j,no k,no i)

struct hl

while(s.size()>1&&cp(s[s.size()-2],s.back(),x))

s.pop_back();

s.push_back(x);

} int qu(int x)

return -2*s.back().x*x+s.back().y+x*x;

}}bl[n];

int operator <(nn x,nn y)

priority_queueq;

queuetq;

vectors[n],t[n],g[n],vt[n],p[n],id[n];

void dij());

for(int i=2;i<=n;i++)

d[i]=1e18;

while(!q.empty()));

} }}

void tt() }}

void dd()

c=0;

for(int j=0;jc++;

} }}void add(int x,int y,int z)

signed main()

scanf("%lld",&a);

g[i].push_back(a);

} for(int i=1;i<=m;i++)

for(int j=0;j+1add(g[i][j],g[i][j+1],vt[i][j]);

dij();

for(int i=1;i<=m;i++)

for(int k=la;k<=j;k++)

s[cc].resize(p[cc].size());

for(int k=0;k+1s[cc][k+1]=s[cc][k]+vt[i][k+la];

la=j+1;

}} cc++;

for(int k=la;kp[cc].push_back(g[i][k]);

for(int k=la;ks[cc].resize(p[cc].size());

for(int k=0;k+1s[cc][k+1]=s[cc][k]+vt[i][k+la];

} printf("%lld ",d[n]);

memset(h,0,sizeof(h));

ec=0;

for(int i=1;i<=m;i++)

for(int j=0;j+1if(d[g[i][j+1]]==d[g[i][j]]+vt[i][j])

tt();

dd();

printf("%lld ",d[n]);

}

谷歌新doodle慶祝大都會藝術博物館151周年

據外媒報道,大都會藝術博物館 以下簡稱程式設計客棧met 是美國最大的藝術博物館,其擁有超200萬件可以追溯到5000年前的文物。當地時間周二是它的151周年紀念,谷歌也加入到了這場派對中,其doodle動畫塗鴉描繪了18件來自該博物館的藝術品。據了解,met的起源可追溯到1866年,當時一群在巴黎...

高校大都會使用的工具,課程錄播軟體哪個好?

很多朋友發現近幾年課程錄播越來越火了,網上的一些課程越來越多,雖然面對面教學模式更加好溝通和把握學生情緒,但是網路錄播課程就不受歡迎了嗎?不,是越來越受歡迎的,畢竟一些好的講課內容可以分享給更多更需要的朋友們,只是需要簡單的錄屏操作而已就能做到,使用課程錄播軟體順手就能做到,那麼我們應該怎樣去操作呢...

保險公司「大都會人壽」以新興企業態度應對大資料挑戰

大都會人壽是一家規模龐大的保險企業,在跨越美洲 歐洲以及亞洲的龐大市場當中擁有超過9000萬客戶。不過在本週三於紐約市舉辦的gigaom structure data大會的舞台上,該公司區域應用程式開發部門副總裁兼cio gary hoberman指出該公司在部署大資料應用程式時 更傾向於學習規模精...