牛客小A的最短路(矩陣快速冪+K步可達路徑)

題目
暴力法

#include<bits/stdc++.h>
using namespace std;
const int inf= 0x3f3f3f3f;
typedef long long ll;
ll n,m,k,s;
const ll mod = 1000000007;
vector<ll>g[1005];
ll bfs()
{
	ll path = 0;
    ll cn = 0;
    set<ll>s1;
    set<ll>s2;
    s1.insert(s);
    while(1)
    {
    	set<ll>::iterator it = s1.begin();
    	path++;
    	if(path==k+1) break;
    	s2.clear();
    	while(it!=s1.end())
    	{
    		ll u = *it;
    		ll len = g[u].size();
    		for(int i=0;i<len;i++)
    		{
    			s2.insert(g[u][i]);
    			if(path==k) cn = (cn+1)%mod;
			}
			it++;
		}
		s1  = s2;
	}
    return cn;
}
int main()
{
    cin>>n>>m>>k>>s;
    for(int i=1;i<=m;i++)
    {
        ll u,v;cin>>u>>v;
        g[u].push_back(v);
    }
    cout<<bfs()<<endl;
}
發佈了17 篇原創文章 · 獲贊 8 · 訪問量 2308
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章