Oiclass P1959. 分糖果 题解
这道题非常的水。
虽然是dijkstra算法,但是这里DFS是线性的
所以,我们可以直接DFS。
先放AC代码:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 1e5 + 10;
vector <int> v[N];
int n,m,ans,p,c,cnt,d[N];
bool vis[N];
void dfs(int x,int Time)
{
d[x] = min(d[x],Time);
for(int p : v[x])
if (d[p] > Time + 1)
{
d[p] = Time + 1;
dfs(p,Time + 1);
}
}
int main()
{
memset(d,0x3f,sizeof(d));
ios::sync_with_stdio(0);
cin >> n >> p >> c;
cin >> m;
while (p --)
{
int x,y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
vis[c] = 1;
dfs(c,1);
for(int i = 1;i <= n;i ++) ans = max(ans,d[i]);
cout << ans + m << endl;
return 0;
}
这个就没什么好说的了。首先我们从