2 条题解
-
0
用队列 记录当前被感染的人, 来记录是否免疫, 记录是否在队列中。
为空即没有感染的人,直接输出 。
然后用快读快写避免 TLE 就可以过了。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+10; vector<int>g[MAXN]; int n,m,s,day=2; bool inq[MAXN],mian[MAXN]; struct sk { int u,ver; }; queue<sk>q; int read() { int x=0,f=1; char c=getchar(); while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); } while(isdigit(c)) { x=(x<<3)+(x<<1)+c-'0'; c=getchar(); } return x*f; } void out(int x) { if(x<0)x=-x; if(x<10)putchar(x+'0'); else out(x/10),putchar(x%10+'0'); } int main() { n=read(),m=read(),s=read(); for(int i=1;i<=m;i++) { int u=read(),v=read(); g[u].push_back(v); g[v].push_back(u); } q.push({s,1}); inq[s]=1; while(day<=MAXN) { while(!q.empty()&&q.front().ver==day-1) { int u=q.front().u; q.pop(); inq[u]=0; for(auto v:g[u]) { if(!inq[v]&&!mian[v]) { inq[v]=1; q.push({v,day}); } } mian[u]=day; } if(q.empty()) { out(day-1); return 0; } day++; } puts("-1"); return 0; }
信息
- ID
- 43
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 21
- 已通过
- 3
- 上传者