这个代码是车站分级的
1 个赞
tks
1 个赞
发现输出结果不对,样例的输出甚至反过来了
1 个赞
样例的输出甚至反过来了
1 个赞
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}你这段是不是有点问题,因为vis[i]在一趟趟输入之后,他代表的是有没有出现在某一趟,而不是这一趟没输入的车站
1 个赞
如果我猜的没错,你想做的是这趟没出现的车站肯定比这一趟的车站级别低
1 个赞
但vis没被访问的会越来越少的
1 个赞
对。
1 个赞
哦没看后面,但是clear还是有问题的
1 个赞
clear之后,vis就成空数组了,你访问会越界
1 个赞
所以应该是把vis数组设置为0!
1 个赞
对的
1 个赞
CE了…
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
map<int,bool>vis;
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
for(int i=1;i<=vis.size();i++) vis[i].second=0;
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2+1;
}
1 个赞
幽默vis.size()
,把vis[i].second
改成vis[i]
边是不是建反了
vis[i]=0
@yangshe
而且据我所知(测试),map
在访问键
的时候若没有该键,则设为默认值[0]
应该不存在越界一说
second是迭代器的写法
纠正一下,second是pair<>的成员,一般在迭代器访问的时候用到