1 solutions
-
0
C++ :
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; struct node { int to;//终点位置 int next;//同一起点的下一条边存储在edge数组中的位置(理解了这个静态邻接表就可以了) int data; //权值 }; int n,p,c,m,len,dis[100001]; int head[100001]={0};//以该点为起点的第一条边存储在edge数组中的位置 node a[10000001]; void insert(int,int); void spfa(int); void init(); int main() { //freopen("candy10.in","r",stdin); init(); spfa(c); int tot=0; for(int i=1;i<=n;i++)if(dis[i]>tot) tot=dis[i]; cout<<tot+m+1<<endl; return 0; } void insert(int x,int y) { len++; a[len].to=y; a[len].data=1; a[len].next=head[x]; head[x]=len; } void init() { cin>>n>>p>>c; cin>>m; for(int i=1;i<=p;i++) { int x,y; cin>>x>>y; insert(x,y); insert(y,x); } } void spfa(int x) { queue<int> q; bool flag[100001]={0}; memset(dis,0x7f,sizeof(dis)); dis[x]=0; q.push(x); flag[x]=1; while(!q.empty()) { int k=q.front(); for(int i=head[k];i!=0;i=a[i].next) { int t=a[i].to; if(dis[t]>dis[k]+a[i].data) { dis[t]=dis[k]+a[i].data; if(!flag[t]) { q.push(t); flag[t]=true; } } } flag[k]=false; q.pop(); } }
- 1
Information
- ID
- 586
- Time
- 2000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By