Codeforces Round #674 Div. 3E. 최대 흐름 해제 Rock, Paper, Sciessors
9516 단어 codeforces최대 흐름C++
제목의 뜻
생각
우선 문제를 다음과 같이 바꾸자.
포인트는 각 손 옆의 캡이 무한대라는 것이다.(본 문제에서 각종 수량을cap로 할 수 있으나 문제로 고려할 때cap를 제한할 필요가 없고 inf로 처리할 수 있다)
우선 왼쪽 승리의 최대 승리 횟수를 계산한 도표다.
다음은 오른쪽에 가장 큰 실패자 수를 구하는 도표입니다.
이루어지다
ACL 부분은 생략됩니다.int main(int argc, char *argv[]) {
mf_graph<ll> mfwin(8);
mf_graph<ll> mflose(8);
ll n,ar,as,ap,br,bs,bp;
cin>>n>>ar>>as>>ap>>br>>bs>>bp;
ll inf = 1e12;
ll reswin, reslose;
// 勝つ回数
mfwin.add_edge(0, 1, ar); mfwin.add_edge(0, 2, as); mfwin.add_edge(0, 3, ap);
mfwin.add_edge(4, 7, br); mfwin.add_edge(5, 7, bs); mfwin.add_edge(6, 7, bp);
mfwin.add_edge(1, 5, inf);
mfwin.add_edge(2, 6, inf);
mfwin.add_edge(3, 4, inf);
reswin = mfwin.flow(0, 7);
// あいこ か まけ の回数
mflose.add_edge(0, 1, ar); mflose.add_edge(0, 2, as); mflose.add_edge(0, 3, ap);
mflose.add_edge(4, 7, br); mflose.add_edge(5, 7, bs); mflose.add_edge(6, 7, bp);
mflose.add_edge(1, 4, inf); mflose.add_edge(1, 6, inf);
mflose.add_edge(2, 4, inf); mflose.add_edge(2, 5, inf);
mflose.add_edge(3, 5, inf); mflose.add_edge(3, 6, inf);
reslose = mflose.flow(0, 7);
cout << n - reslose << " " << reswin << "\n";
}
Reference
이 문제에 관하여(Codeforces Round #674 Div. 3E. 최대 흐름 해제 Rock, Paper, Sciessors), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/recuraki/items/7e6c65668fe80fdd7a9a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
int main(int argc, char *argv[]) {
mf_graph<ll> mfwin(8);
mf_graph<ll> mflose(8);
ll n,ar,as,ap,br,bs,bp;
cin>>n>>ar>>as>>ap>>br>>bs>>bp;
ll inf = 1e12;
ll reswin, reslose;
// 勝つ回数
mfwin.add_edge(0, 1, ar); mfwin.add_edge(0, 2, as); mfwin.add_edge(0, 3, ap);
mfwin.add_edge(4, 7, br); mfwin.add_edge(5, 7, bs); mfwin.add_edge(6, 7, bp);
mfwin.add_edge(1, 5, inf);
mfwin.add_edge(2, 6, inf);
mfwin.add_edge(3, 4, inf);
reswin = mfwin.flow(0, 7);
// あいこ か まけ の回数
mflose.add_edge(0, 1, ar); mflose.add_edge(0, 2, as); mflose.add_edge(0, 3, ap);
mflose.add_edge(4, 7, br); mflose.add_edge(5, 7, bs); mflose.add_edge(6, 7, bp);
mflose.add_edge(1, 4, inf); mflose.add_edge(1, 6, inf);
mflose.add_edge(2, 4, inf); mflose.add_edge(2, 5, inf);
mflose.add_edge(3, 5, inf); mflose.add_edge(3, 6, inf);
reslose = mflose.flow(0, 7);
cout << n - reslose << " " << reswin << "\n";
}
Reference
이 문제에 관하여(Codeforces Round #674 Div. 3E. 최대 흐름 해제 Rock, Paper, Sciessors), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/recuraki/items/7e6c65668fe80fdd7a9a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)