HDU 5521 巧妙地最短路

2021-08-28 21:44:15 字數 901 閱讀 9064

題意:n個點,m塊,塊的意思就是說,在塊中的點任意兩點的距離都是t,問分別從1點和n點走到某個點,這個點的花費就是二者較大的,問這n個點花費最小是多少,並按字典序列印序號

思路:這題頭疼的就是不知道怎麼建圖,暴力建圖會超記憶體,有乙個巧妙的方法是

將這個塊中的點全部連到乙個點上,每條邊花費t/2,這樣任意兩點仍然是t的花費。

這樣最多1e6條邊

#includeusing namespace std;

const int n=2e5+10;

typedef long long ll;

const ll inf=99999999999999999;

struct node;

vectorg[n];

ll dis1[n], dis2[n], dis[n];

int n, m;

int ans[n], tot;

bitsetinq;

void spfa(int s, ll dd)}}

}}void init()

}int main());

g[p].push_back((node));}}

spfa(1, dis1);

spfa(n, dis2);

ll mn=inf;

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

printf("case #%d: ", ++cas);

if(mn==inf)

printf("%lld\n", mn/2);

tot=0;

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

// puts("");

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

}return 0;

}

hdu5521 二維最短路,集合或者拆點

給定乙個圖,每個集合內部的點相互到達的話費是一定的,兩個人分別在1和m點上,問你他們倆到達某些點最小的花費,如果有好多點可以供選擇,就按從小到大的順序輸出那些點。1 如果相互建邊感覺肯定太多了建不了。畢竟是n!2 這道題還考察對鄰接表的理解,鄰接表上的各行元素代表和這個點有相互連線的關係,我們可以讓...

HDU 5521 Meeting 拆點 最短路

題目鏈結 給m個由圖中結點組成的點集,點集中的點兩兩連通且距離為相等的ti。現有兩人分別從1和n點處同時出發嗎,問能否相遇以及相遇的最短時間。很容易想到直接分別以點1和點n為起始點求最短路,再遍歷各個點即可求得最短相遇時間。然而建圖上卻有問題 這個題中的邊是以點集的形式給出,極端情況下可能會出現有1...

HDU 5521 Meeting 拆點 最短路

題目鏈結 給m個由圖中結點組成的點集,點集中的點兩兩連通且距離為相等的ti。現有兩人分別從1和n點處同時出發嗎,問能否相遇以及相遇的最短時間。很容易想到直接分別以點1和點n為起始點求最短路,再遍歷各個點即可求得最短相遇時間。然而建圖上卻有問題 這個題中的邊是以點集的形式給出,極端情況下可能會出現有1...