洛谷 P3008 道路與航線

2022-05-10 05:49:39 字數 1170 閱讀 6097

因為有負權邊,所以不能 dijkstra ,本題資料還卡 spfa

但是我們發現,有負權的都是有向邊,而且如果把無向邊連成的聯通塊看成乙個點的話,有向邊就連成了乙個 dag,所以我們可以對所有的聯通塊用dij求最短路

在 dag上用拓撲序求最短路

注意:堆優化的 dijkstra 在定義的結構體重載運算子的時候注意相反

因為存在負權邊,所以兩點不可達,不等價於兩點間的距離 == inf ,應為 兩點間的距離大於乙個很大的數

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

const int maxn = 100005;

int init()

while(c >= '0' && c <= '9')

return fh * rv;

}int head[maxn], n, m1, m2, s, nume, id[maxn], tot, dis[maxn], cnt[maxn];

bool f[maxn];

vector ve[25005];

struct edgee[maxn<<1];

void adde(int from, int to, int dis)

void dfs(int u)

}struct node

};priority_queue q;

queue qq;

void dij(int x));

while(!q.empty())

if(id[v.num] != id[u.num])

}} }

}int main()

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

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

memset(dis, 0x3f, sizeof(dis));

dis[s] = 0;

for(int i = 1; i <= tot; i++) if(!cnt[i]) qq.push(i);

while(!qq.empty())

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

return 0;

}

洛谷P2296 尋找道路

在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...

洛谷 P2296 尋找道路

題目描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...

洛谷 P2296 尋找道路

題目大意 在乙個有向圖中找出2點之間的最短路,並且路徑上的所有點的出邊所指向的點都直接或間接與終點連通。題解 spfa 佇列 dfs 1.從終點方向搜,把終點能到的點標記可到達。2.把終點能到達的點的出邊判斷,如果出邊未被標記則狀態更新為不可到達。3.做spfa,若t i 可以到達就做,不然不做。v...