Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- int n, m = 0;
- long long dp[10001][2];
- bool used[10000];
- vector <vector<long long>> cost;
- vector <vector<int>> edge;
- vector <vector<int>> type;
- int main()
- {
- cin >> n >> m;
- cost.resize(n);
- edge.resize(n);
- type.resize(n);
- for (int i = 0; i < m; i++) {
- string str;
- int tpn, tptw, cst;
- cin >> tpn >> tptw >> cst >> str;
- if (str[0] == 'L') {
- type[tptw - 1].push_back(0);
- }
- if (str[0] == 'P') {
- type[tptw - 1].push_back(1);
- }
- if (str[0] == 'C') {
- type[tptw - 1].push_back(2);
- }
- edge[tptw - 1].push_back(tpn - 1);
- cost[tptw - 1].push_back(cst);
- }
- cout << 1;
- used[0] = true;
- for (int i = 0; i < n; i++) {
- used[i + 1] = false;
- for (int k = 0; k < edge[i].size(); k++) {
- if (used[edge[i][k]] == true && (type[i][k] == 0 || type[i][k] == 2)) {
- used[i] = true;
- }
- }
- long long min = 100000000000ll;
- for (int k = 0; k < edge[i].size(); k++) {
- if (used[edge[i][k]] == true && used[i] == true) {
- if (min > dp[edge[i][k]][0] + cost[i][k]) {
- min = dp[edge[i][k]][0] + cost[i][k];
- }
- }
- }
- dp[i][0] = min;
- if (dp[i][0] == 100000000000ll) {
- dp[i][0] = 0;
- }
- }
- used[0] = true;
- for (int i = 0; i < n; i++) {
- used[i + 1] = false;
- for (int k = 0; k < edge[i].size(); k++) {
- if (used[edge[i][k]] == true) {
- used[i] = true;
- }
- }
- long long min = 100000000000ll;
- for (int k = 0; k < edge[i].size(); k++) {
- if (used[edge[i][k]] == true && used[i] == true) {
- if (min > dp[edge[i][k]][0] + cost[i][k]) {
- min = dp[edge[i][k]][0] + cost[i][k];
- }
- if ((min > dp[edge[i][k]][1] + cost[i][k]) && (type[i][k] == 1 || type[i][k] == 2) ) {
- min = dp[edge[i][k]][1] + cost[i][k];
- }
- }
- }
- dp[i][1] = min;
- if (dp[i][0] == 100000000000ll) {
- dp[i][0] = 0;
- }
- }
- if (dp[n - 1][0] > dp[n - 1][1]) {
- long long answer = dp[n - 1][1];
- }
- else {
- long long answer = dp[n - 1][0];
- }
- cout << 1;
- if(dp[n-1][0] == dp[n-1][1] && dp[n-1][0] == 0){
- cout << 'Offline';
- else{
- cout << 'Online' << endl;
- cout << answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement