luogu1462 通往奧格瑞瑪的道路

2022-06-30 07:51:11 字數 1503 閱讀 4654

給出乙個有邊權和點權的無向圖,規定路徑長度為路徑經過的邊權和。求出這麼一條從起點到終點的路徑,它的長度小於等於給出的長度限制(條件1),且經過的點權最大的點的點權是所有滿足條件1的路徑中的最小的。

圖論題我沒怎麼接觸過需要用到反演思想的,然而這道題就是。我們發現這個圖有這麼乙個單調性:選的點數越多,子圖中起點到終點的最短路徑就會越短。因此我們每次列舉乙個節點,將點權小於等於該節點的節點都納入子圖(顯然該節點的點權越大,加入子圖中的節點數越多),看看圖中的最短路徑長度是否小於等於長度限制。顯然列舉的節點的點權越大,滿足限制條件可能性越大,反之越小。這樣我們就可以二分了。

#include #include #include #include #include using namespace std;

const int max_node = 10010, max_edge = 100010, inf = 0x3f3f3f3f;

int distlimit;

struct node;

struct edge;

struct node

_nodes[max_node], *sorted[max_node];

int totnode;

struct edge

_edges[max_edge];

int _ecount;

struct cmppnode

};bool cmp(node *a, node *b)

void addedge(node *from, node *to, int w)

void build(int uid, int vid, int w)

struct heapnode

bool operator < (const heapnode& a) const

}; void dijkstra()

if (!_nodes[1].ingraph)

return;

_nodes[1].dist = 0;

static priority_queueq;

q.push(heapnode(0, _nodes + 1));

while (!q.empty())}}

}bool alive(int x)

int lowerbound(int l, int r, bool (*inrange) (int))

return l;

}int main()

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

sorted[i] = _nodes + i;

sort(sorted + 1, sorted + totnode + 1, cmp);

int p = lowerbound(1, totnode, alive);

if (p == -1)

printf("afk\n");

else

printf("%d\n", sorted[p]->weight);

return 0;

}

水題日常 Luogu1462 通往奧格瑞瑪的道路

qwq馬上高二啦不能頹啦 知乎上聽說寫部落格的效果挺好的,來試一下好啦 題目鏈結 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進而損失一定的血量。每次經過乙個城市,都會被收取一定的過路費 包括起點和終點 路上並沒有...

洛谷1462 通往奧格瑞瑪的道路

洛谷1462 通往奧格瑞瑪的道路 題目背景 在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 題目描述 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著...

P1462 通往奧格瑞瑪的道路

在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...