2024年9月14日 警钟长鸣

今天做了一道题

原题链接

传上去,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;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值