今天做了一道题
传上去,WA
后来发现有两个问题
第一个问题,我没有考虑无入度点不在1的情况;
改了以后,40pt
第二个问题,没给ans取余;
改了以后,AC
所以警钟长鸣,第一,考虑不全见祖宗
如果遇到这种图的题,一定要考虑不在1的情况,以及多个终点的情况,题目里有特殊说明的除外
第二,应模不模见祖宗
要模一起模,要是模的时候发现会出问题那就待会模,不然数据一大直接WA,没啥余地的,至少减一半分
这种的小数据难找不说,白废了我两次下载
警钟长鸣🙏🙏🙏
附上ac代码
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n,m,ans;
vector<vector<int>> a;
vector<int> in,cnt;
void tp(){
queue<int> b;
for(int i=1; i<=n; i++){
if(!in[i]){
cnt[i] = 1;
b.push(i);
// cout << i << ' ';
}
}
// cout << endl;
while(b.size()){
int u = b.front();
b.pop();
if(!a[u].size()){
ans += cnt[u];
ans %= 80112002;
// cout << u << ' ';
}
for(auto v : a[u]){
in[v]--;
cnt[v]+=cnt[u];
cnt[v] %= 80112002;
if(!in[v]) b.push(v);
}
}
// cout << endl;
}
signed main(){
cin >> n >> m;
a = vector<vector<int>>(n+1,vector<int>());
in = cnt = vector<int>(n+1);
for(int i=1; i<=m; i++){
int u,v;
cin >> u >> v;
a[u].push_back(v);
in[v]++;
}
tp();
cout << ans << endl;
}