這題如果注意到m的範圍,那麼思路將會豁然開朗
因為如果是一棵樹,那麼直接lca就能求得兩點間最小值
但是現在是圖,並且邊數就比一棵樹大100左右
所以我們可以想到,先將圖中取出生成樹,用lca求答案
那麼剩下就有100條邊左右未使用,我們發現,答案可能經過這些邊,因此我們列舉這些邊的端點去做01最短路,對兩種情況取min就是最後答案
直接做最短路的正確性在於,如果答案使用到了某條未在樹上的邊,那麼我們因為使用了這條邊做最短路,因此我們求得的一定是通過這條邊相關的最短距離
因此列舉全部就能獲得答案
#includeusingview codenamespace
std;
typedef
long
long
ll;typedef pair
pll;
const
int n=1e5+200
;const
int mod=1e9+7
;int h[n],ne[n<<1],e[n<<1
],idx,cnt;
bool st[n<<1],pos[n],used[n<<1
];int
n,m;
int lg[n<<1
];int depth[n],f[n][25],dis[210][n],from[n<<1],to[n<<1
];void add(int a,int
b)void dfs(int u,int
fa)
for(i=h[u];i!=-1;i=ne[i])
}void bfs(int
s) dis[cnt][s]=0
; queue
q;q.push(s);
while
(q.size())}}
}int lca(int a,int
b) }
if(a==b)
return
a;
for(i=21;i>=0;i--)
}return f[a][0];}
intmain()
st[0]=1
; dfs(
1,0);
for(i=0;i2
) }
intq;
cin>>q;
while(q--)
return0;
}
變色DNA(最短路思維題)
個人心得 太水了,還是對最短路不太深入了解,無法構建出最短路模板,然後就是讀題能力,這題的關鍵在於轉換為最短路模板,因為dfs我在24組超時了。假設把從i到j的代價看做是權值,那麼就是對權值的確立了,顯而易見,權值跟前面出現的y的個數有關。權值建立後就可以用最短路了,特意看了下最短路深入了解了下,每...
最短路 逆向思維 字典序最小
題意 無向圖,每個點由大小寫組成,大寫字母代表城鎮,經過需要繳納 ce il s um 20 ceil sum 20 ceil sum 20費用,小寫字母代表村莊,經過需要繳納1 11費用。已經到達目的地點t tt,需要運送到的貨物,求從起點s ss需要帶的貨物的最小值,並輸出字典序最小的路線 起點...
譚鬆鬆的旅遊計畫 LCA 求最短路
譚鬆鬆是乙個愛旅遊的人,他非常的熱愛旅遊,即便身體被掏空也要堅持旅遊。喵蛤王國由n個城市組成,由n 1條道路連通,每條道路長度為ci,使得任意兩座城市都能相互到達。譚鬆鬆有m個旅遊計畫,每個旅遊計畫有乙個起點ai,乙個終點bi,所以譚鬆鬆想知道,對於每個旅遊計畫,從起點到終點的最短路長度為多少?in...