我要祭出大招了
难道是!?。。。。
??啥意思??
没啥意思

我建议把ans取max的操作放在这里:
![]()
那最后输出啥呢???
ans啊
哇哈哈哈哈哈!!!!!!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[1005], o[1005], in[1005], dp[1005], d[1005], vis[1005];
vector<ll> v[1005];
ll b[1005][1005];
int main(){
ll n, m;
cin >> n >> m;
for(ll i=1;i<=m;i++){
cin >> s[i];
vis[s[i]]=1;
}
for(ll i=1;i<=n;i++){
if(vis[i]) continue;
for(ll j=1;j<=v[i].size();j++){
if(!b[i][s[j]]){//如果没建边 (因为我们是需要从没到站的向到站的建边,题目说等级更高的一定进站,即是高级的指向低级的)
in[s[j]]++;//低级的站台入度+1
// o[i]++;
v[i].push_back(s[j]);//用vector建边
// v[s[j]].push_back(i);
// b[s[j]][i]=1;
b[i][s[j]]=1;//标记已建边
}
}
}
queue<ll> q;
for(ll i=1;i<=n;i++){
if(in[i]==0){
dp[i]=1;
q.push(i);
}
}
ll ans=0;
while(!q.empty()){
ll u=q.front();
q.pop();
for(ll k:v[u]){
in[k]--;
if(in[k]==0){ dp[k]=max(dp[u]+1,dp[k]); ans=max(dp[k], ans);}
if(in[k]==0) q.push(k);
} // 不用vis数组!!!!
}
cout << ans;
}
你确定其他的没问题??
哇哈哈哈哈哈哈哈哈哈
有啊
tm第一个样例过了第二个美国(改了一下上面建边的双重循环)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[1005], o[1005], in[1005], dp[1005], d[1005], vis[1005];
vector<ll> v[1005];
ll b[1005][1005];
int main(){
ll n, m;
cin >> n >> m;
for(ll i=1;i<=m;i++){
cin >> s[i];
vis[s[i]]=1;
}
for(ll i=1;i<=n;i++){
if(vis[i]) continue;
for(ll j=1;j<=n;j++){
if(!b[i][s[j]]){//如果没建边 (因为我们是需要从没到站的向到站的建边,题目说等级更高的一定进站,即是高级的指向低级的)
in[s[j]]++;//低级的站台入度+1
// o[i]++;
v[i].push_back(s[j]);//用vector建边
// v[s[j]].push_back(i);
// b[s[j]][i]=1;
b[i][s[j]]=1;//标记已建边
}
}
}
queue<ll> q;
for(ll i=1;i<=n;i++){
if(in[i]==0){
dp[i]=1;
q.push(i);
}
}
ll ans=0;
while(!q.empty()){
ll u=q.front();
q.pop();
for(ll k:v[u]){
in[k]--;
if(in[k]==0){ dp[k]=max(dp[u]+1,dp[k]); ans=max(dp[k], ans);}
if(in[k]==0) q.push(k);
} // 不用vis数组!!!!
}
cout << ans;
}
还是建边的问题

这是我的
快点,要下课了
len施舍么
len是啥
就是到了几个站
第一个样例还是没过,ε=(´ο`*)))唉,明天调吧