Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // cách đệ quy
- /*
- #include <bits/stdc++.h>
- #define int long long
- #define MOD 1000000007
- using namespace std;
- typedef pair<int,int> ii;
- typedef vector<ii> viii;
- const int N = 100005;
- int n,m;
- viii a[N];
- vector<int> f;
- int maxx = 0;
- int calc(int u)
- {
- if (f[u] != -1) return f[u];
- f[u] = 0;
- for(int i=0; i<a[u].size(); ++i)
- {
- int v = a[u][i].second;
- f[u] = max(f[u], calc(v) + a[u][i].first) % MOD;
- }
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);cout.tie(0);
- freopen("maxpdag.inp","r",stdin);
- cin >> n >> m;
- f.resize(n+1,-1);
- for(int i=1; i<=m; ++i)
- {
- int u,v,z;
- cin >> u >> v >> z;
- a[u].push_back(ii(z,v));
- }
- for(int i=1; i<=n; ++i)
- {
- f[i] = calc(i);
- }
- for(int i=1; i<=n; ++i)
- {
- //cout << f[i] << endl;
- maxx = max(maxx,f[i]);
- }
- cout << maxx;
- return 0;
- }
- */
- // cách topo
- #include <bits/stdc++.h>
- #define int long long
- #define MOD 1000000007
- #define TR(k1,k2) for(__typeof((k2).begin()) k1=(k2).begin();k1!=(k2).end();++k1)
- using namespace std;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- const int N = 100005;
- int n,m,d[N];
- vector<int> b(N,0);
- queue<int> q;
- vii a[N];
- void sol()
- {
- while (q.size())
- {
- int u = q.front();
- q.pop();
- TR(v,a[u])
- {
- if(d[v->second]<d[u] + v->first) d[v->second]=(d[u]+v->first);
- --b[v->second];
- if (!b[v->second]) q.push(v->second);
- }
- }
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);cout.tie(0);
- freopen("maxpdag.inp","r",stdin);
- int maxx = 0;
- cin >> n >> m;
- int u,v,z;
- for(int i=1; i<=m; ++i)
- {
- cin >> u >> v >> z;
- a[u].push_back(ii(z,v));
- b[v]++;
- }
- for(int i=1; i<=n; ++i) {
- if (!b[i]) q.push(i);
- }
- sol();
- for(int i=1; i<=n; ++i)
- {
- maxx = max(maxx,d[i]);
- }
- cout << maxx;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement