題意: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...