題目:
給定乙個有n個頂點、m條邊的有向圖,頂點下標為從1到n,每條邊都有邊權。判斷這個有向圖是否是有向無環圖,如果是的話,請處理k個查詢,每個查詢為圖中的一條邊,求這條邊的最早發生時間和最晚發生時間。最後再輸出圖中的所有關鍵路徑。
輸入
每個輸入檔案中一組資料。
第一行為兩個整數n、m,表示有向無環圖的頂點數和邊數(1<=n<=1000, 0<=m<=n*(n-1)),頂點編號為從1到n。
接下來m行,每行為三個正整數u、v、w(1<=u,v<=n,0然後是乙個正整數k(1<=k<=1000),表示查詢個數。
接著是k行,每行為兩個正整數u、v,分別表示查詢邊的起點和終點。資料保證查詢邊一定是圖上存在的邊。
輸出
如果給出的圖不是有向無環圖,那麼在一行裡輸出no,後面的查詢結果和關鍵路徑均不需要輸出;
如果給出的圖是有向無環圖,那麼在一行裡輸出yes,接著輸出下面的內容:
每個查詢一行,輸出查詢邊的最早發生時間和最晚發生時間;
之後一行輸出乙個整數:關鍵路徑上的邊權之和;
最後若干行輸出所有關鍵路徑,每行表示其中一條,格式為用->連線的頂點編號。注意,如果有兩條關鍵路徑a[1]->a[2]->…->a[k]->a[k+1]->…與b[1]->b[2]->…->b[k]->[k+1]->…,滿足a[1]==b[1]、a[2]==b[2]、…、a[k]==b[k]、a[k+1]sample input 1
4 51 2 3
1 3 2
1 4 5
2 4 1
3 4 3
21 3
2 4sample output 1
yes0 0
3 45
1->3->4
1->4
sample input 2
3 31 2 3
2 3 1
3 2 2
21 2
2 3sample output 2
noac**:
#include using namespace std;
const int maxn=1111;
struct node;
vectorg[maxn];
vectortoporder,pre[maxn],path;
int e[maxn][maxn],l[maxn][maxn];
int n,m,ed,st,maxlen=-1,ind[maxn],ve[maxn],vl[maxn],origin[maxn];
bool istoplogical()
} if(toporder.size()==n) return true;
else return false;
}void dfs(int u)
); }
if(istoplogical())
printf("%d\n",maxlen);
for(int i=1;i<=n;i++) if(origin[i]==0&&pre[i].size()!=0) dfs(i);
} else printf("no\n");
return 0;
}
華為機試 模擬記憶體分配
模擬乙個連續的記憶體塊,其大小固定為100位元組 1.使用者輸入 request 10 表示從記憶體中分配乙個連續的大小為10位元組的空間,當分配成功時,輸出記憶體區塊的首位址,分配失敗 記憶體空間不足 時輸出 error 2.使用者輸入 release 0 表示釋放首位址為0所對應的區塊,如果不存...
華為模擬機試 C 題解
計算a b的和 每行包含兩個整數a和b 對於每行輸入對應輸出一行a和b的和 輸入1 5輸出 6 includeusing namespace std int main 參考 c eof是個什麼東西?長度為n的陣列亂序存放著0至n 1.現在只能進行0與其他數的交換,完成以下函式 交換陣列裡n和0的位置...
higan bsnes 遊戲模擬器的編譯和試玩
higan 是一款開源的遊戲模擬器實現,這裡直接引用英文介紹 higan formerly bsnes is a nintendo multi system emulator that began development on 2004 10 14.it currently supports the...