Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.

Input Specification:

Each input file contains one test case. Each case starts with a line containing two positive integers N (≤100), the number of activity check points (hence it is assumed that the check points are numbered from 0 to N−1), and M, the number of activities. Then M lines follow, each gives the description of an activity. For the i-th activity, three non-negative numbers are given: S[i]E[i], and L[i], where S[i] is the index of the starting check point, E[i] of the ending check point, and L[i] the lasting time of the activity. The numbers in a line are separated by a space.

Output Specification:

For each test case, if the scheduling is possible, print in a line its earliest completion time; or simply output "Impossible".

Sample Input 1:

9 12
0 1 6
0 2 4
0 3 5
1 4 1
2 4 1
3 5 2
5 4 0
4 6 9
4 7 7
5 7 4
6 8 2
7 8 4

Sample Output 1:

18

Sample Input 2:

4 5
0 1 1
0 2 2
2 1 3
1 3 4
3 2 5

Sample Output 2:

Impossible
#include<stdio.h>
#include<queue>
using namespace std;
const int maxn = ; int map[maxn][maxn],d[maxn];
int inDegree[maxn]; void init(int n); int main()
{
int n,m;
scanf("%d%d",&n,&m); init(n); int u,v,w;
for (int i = ; i < m; i++)
{
scanf("%d%d%d",&u,&v,&w);
map[u][v] = w;
inDegree[v]++;
} queue<int> q; for (int i = ; i < n; i++)
{
if (!inDegree[i])
{
q.push(i);
d[i] = ;
}
} while (!q.empty())
{
int cur = q.front();
q.pop(); for (int i = ; i < n; i++)
{
if (map[cur][i] != -)
{
inDegree[i]--;
if (d[i] < d[cur] + map[cur][i])
{
d[i] = d[cur] + map[cur][i];
}
if (!inDegree[i])
{
q.push(i);
}
}
}
} int maxCost = -;
bool flag = true;
for (int i = ; i < n; i++)
{
if (inDegree[i])
{
flag = false;
break;
}
if (d[i] > maxCost)
{
maxCost = d[i];
}
} if (flag)
{
printf("%d",maxCost);
}
else
{
printf("Impossible");
} return ;
} void init(int n)
{
for (int i = ; i < n; i++)
{
d[i] = -;
inDegree[i] = ;
for (int j = ; j < n; j++)
{
map[i][j] = map[j][i] = -;
}
}
}
 

08-图8 How Long Does It Take (25 分)的更多相关文章

  1. PAT A1142 Maximal Clique (25 分)——图

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  2. 7-8 哈利·波特的考试(25 分)(图的最短路径Floyd算法)

    7-8 哈利·波特的考试(25 分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...

  3. PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)

    1013 Battle Over Cities (25 分)   It is vitally important to have all the cities connected by highway ...

  4. PAT A1134 Vertex Cover (25 分)——图遍历

    A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...

  5. PAT A1021 Deepest Root (25 分)——图的BFS,DFS

    A graph which is connected and acyclic can be considered a tree. The hight of the tree depends on th ...

  6. PAT A1013 Battle Over Cities (25 分)——图遍历,联通块个数

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  7. L2-023 图着色问题 (25 分)vector

    图着色问题是一个著名的NP完全问题.给定无向图,,问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请 ...

  8. PAT A1122 Hamiltonian Cycle (25 分)——图遍历

    The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a gra ...

  9. PAT A1150 Travelling Salesman Problem (25 分)——图的遍历

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  10. 1013 Battle Over Cities (25 分)(图的遍历or并查集)

    这题用并查集或者dfs都可以做 dfs #include<bits/stdc++.h> using namespace std; ; bool mp[N][N]; int n,m,k; b ...

随机推荐

  1. 将fileupload标签的值清空

    在开发中遇到了这样一个问题,在一个form表单中,有一个fileupload标签,新增,修改都是同一个form,当我第一次选择了上传文件路径,并且提交之后,第二次再使用这个form,这次没有选择上传文 ...

  2. Git 理解修改

    参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/897884457270432 Git之所以比其他版本控制系统设计得优秀,就是因为Git跟踪 ...

  3. 2019 美柚java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美柚等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美柚,入职一年时间了,也成为了面试官,之 ...

  4. Texture(ASDK)、ComponentKit、LayoutKit、YogaKit

    YogaKit 最轻量,改动量最小,目的最纯粹,同时也最类似于使用 frame ,需要自己造一波在 UITableView 中使用的轮子(各类 frame 结果缓存方案).同类的备选方案是 FlexB ...

  5. Node.js 连接 MySQL数据库

    安装指令:npm install mysql var mysql = require("mysql");console.log(mysql); // 创建链接对象 var conn ...

  6. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单

    tcode WE19, choose an existing IDOC in the system: Just change the existing IDOC Service Order ID to ...

  7. LP线性规划初识

    认识LP 线性规划(Linear Programming) 特指目标函数和约束条件皆为线性的最优化问题. 目标函数: 多个变量形成的函数 约束条件: 由多个等式/不等式形成的约束条件 线性规划: 在线 ...

  8. Odoo MRP模块

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10825963.html 一:MRP MRP:产品制造管理. 产品制造业务设计到以下几个关键概念: 1)BOM ...

  9. Fedora 29 安装 GitBook 教程

    Fedora 29 安装 GitBook 教程 本文原始地址:https://sitoi.cn/posts/53731.html 安装 nvm 安装 nvm curl -o- https://raw. ...

  10. 详解Linux操作系统的进程

    系统 计算机运行起来以后,就是由内核和运行在内核之上的众多进程来实现的(kernel+process) 内存分为 :    线性内存: 物理内存: 计算机的所有运行都只在内存和CPU中运行! 内核空间 ...