题目要求如下:
示例代码如下:
#include < iostream >
#include < vector>
using namespace std;
int main()
{
int nSystem;//系统个数
int nDependency;//依赖关系个数
//下面的代码完成系统个数和依赖关系个数的输入
cin >> nSystem;
cin >> nDependency;
vector<int> nConsumeTime;//每个系统被调后消耗的时间
//下面的代码完成nConsumeTime个节点消耗代价的输入
for (int i = 0; i < nSystem; ++i)
{
int temp;
cin >> temp;
nConsumeTime.push_back(temp);
}
//读取依赖关系
//用一个二维数组表示系统之间的依赖关系--每一行表示一条链式依赖关系
//nRelation[0]:第1行的元素依次为:1->2->5,则表示一条链式依赖关系:2依赖1,5依赖2
//nRelation[1]:第2行的元素依次为:1->3,则表示一条链式依赖关系:3依赖1
//nRelation[2]:第3行的元素依次为:4->5,则表示一条链式依赖关系:5依赖4
//下面的代码完成依赖关系的输入
vector<vector<int>> nRelation;//系统之间的依赖关系
for (int i = 0; i < nDependency; ++i)
{
int nFirst, nSecond;
cin >> nFirst;
cin >> nSecond;
//首先,判断节点(nFirst,nSecond)是否能够链接至已有链路
//方法:判断二维数组nRelation的每一行的最后一个元素是否和nFirst相等,
// 如果相等,则属于该链路,直接插入该链条即可。
// 否则,节点(nFirst,nSecond)属于一条新的链路。
int j = 0;
while (j < nRelation.size())
{
if (nRelation[j][nRelation[j].size() - 1] == nFirst)
{//判断是否相等
//如果相等,则属于该链条
nRelation[j].push_back(nSecond);
}
else
{
++j;//查找下一个链条。判断是否可以插入
}
}
if (j == nRelation.size())
{//属于一个新的链条
vector<int> vTemp;
vTemp.push_back(nFirst);
vTemp.push_back(nSecond);
nRelation.push_back(vTemp);
}
}
//计算消耗代价
vector<int> nSum;
for (int k = 0; k < nRelation.size(); ++k)
{
int sum = 0;
//计算每一条路径的消耗代价
for (int m = 0; m < nRelation[k].size(); ++m)
{//计算第k条路径消耗的代价
//sum += nRelation[k][m];
//累加每一条路径,每一个节点的消耗代价,注意:数组的下标是从0开始。
sum += nConsumeTime[nRelation[k][m] - 1];
}
//保存第k条路径的消耗代价
nSum.push_back(sum);
}
//求出最大值消耗代价
int sumTmp = nSum[0];
for (int i = 1; i < nSum.size(); ++i)
{
if (sumTmp < nSum[i])
{
sumTmp = nSum[i];
}
}
//求出最长路径
int maxRoad;
if (nRelation.size() > 0)
{
maxRoad = nRelation[0].size();
for (int i = 1; i < nRelation.size(); ++i)
{
if (maxRoad < nRelation[i].size())
{
maxRoad = nRelation[i].size();
}
}
}
else if(nRelation.size() == 0)
{
maxRoad = 0;
}
cout<< maxRoad<< " " << sumTmp << endl;
return 0;
}
输入题目所给测试用例,执行程序,运行结果如下图所示:
注意:上述代码仅供参考,阿里的编程题目,没有提供在线调试功能。你写了代码以后,只能选择保存和提交。
其次,要吐槽一些阿里巴巴的出题毛糙程度。
题目的表述都有问题,让别人如何理解。上图前两个表述和后两个表述明显相互矛盾。应该改为:
2 5 //5号系统依赖2号系统
4 5 //5号系统依赖4号系统,
这样才能与前两个表述一致,才能使得输入样例有与题目所述的输出结果。
类似的还有这一道题目:https://blog.csdn.net/Lunar_Queen/article/details/81635437,也是各种表述不当加错别字。