社区讨论
P2185 公路通行税的数据有问题
工单反馈版参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi6ogxz0
- 此快照首次捕获于
- 2025/11/20 08:13 4 个月前
- 此快照最后确认于
- 2025/11/20 08:13 4 个月前
题目中说的数据范围是n<=1000,m<=2000,然而经过实测发现数据中的m的范围会超出2000,希望能够尽快的修改数据~
下面是测出来的m的大小:


测试代码如下:
CPP#include <bits/stdc++.h>
using namespace std;
const int maxn=1500005;
typedef pair<int,int>P;
#define fi first
#define se second
struct edge {
int to,nxt;
}E[maxn];
int n,m;
int d=0;
bool vis[15000];
int head[maxn];
int tot=0;
void addedge(int u,int v) {
E[++tot].to=v;E[tot].nxt=head[u];head[u]=tot;
E[++tot].to=u;E[tot].nxt=head[v];head[v]=tot;
}
void bfs(int st) {
queue<P>Q;
memset(vis,0,sizeof vis);
Q.push(P(0,st));
vis[st]=1;
while(!Q.empty()) {
P p=Q.front();
Q.pop();
int dis=p.fi;
int now=p.se;
d=max(d,dis);
for(int i=head[now];~i;i=E[i].nxt) {
int u=E[i].to;
if(vis[u])continue;
vis[u]=1;
Q.push(P(dis+1,u));
}
}
}
int main() {
while(~scanf("%d%d",&n,&m)) {
if((n|m)==0) break;
for(int i=1;i<=n;i++) head[i]=-1;
tot=0;
d=0;
for(int i=1;i<=m;i++) {
int s,t;
scanf("%d%d",&s,&t);
addedge(s,t);
}
for(int i=1;i<=n;i++) {
bfs(i);
}
if(m>=10000) {
printf("%d\n",m);
}
else printf("%d\n",d*100 );
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...