社区讨论

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的大小:第三个数据点m的大小
第四个数据点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 条回复,欢迎继续交流。

正在加载回复...