The ICPC NAC Experience
Published Mar 24, 2026
The ICPC Pacific Northwest Regionals
The regionals went smoothly. Our region is quite strong, with many other top schools like Stanford, UWashington, and Berkeley. In October I qualified onto the first team with my teammates Alex and Rain. Heading into regionals, we had strong performances in simulations of other regionals, so we were pretty confident going into it.
We had a great start, with each of us solving some easy problems and collecting 4 first solves. In the middle of the contest, I managed to solve D, which ended up being the only solve on it! It was a hard problem that was also hard to implement, and Rain helped me through a lot of debugging.
You are given a simple connected graph of order with weighted edges. Output numbers: for each vertex , the distance to the farthest vertex from .
Solve this in .
—Source: 2025 ICPC PacNW Regional Problem D
Later, I also solved B after discussing with Alex, and with an hour remaining we looked onto I and J.
We completely misread J and far overcomplicated I. We didn’t end up solving either; it was a horrible last hour showing. We were definitely on track to winning the regional so it was a bit unfortunate, but we did achieve our goal of qualifying for the NA Championships.
The Putnam
I overslept and didn’t attend.
The ICMT
2026 was the inaugural Intercollegiate Math Tournament, held at Columbia University in NYC. In late February I attended with some friends from UBC and UWaterloo. Sadly the weather was pretty cold and the city predictably less vibrant than during my visit last summer.
We did great in both the power and constellation rounds with immaculate teamwork.
However, our entire team threw the individual round, except my teammate Rain who did great. Our Placeholder Team Name was genuinely meant as a placeholder, we just forgot to change it…
Despite the poor individual round we ended up in the top 10 teams overall.
The ICPC NA Championship
The NAC was held in Orland this year and was such a fun experience. Our flight there had a layover in Toronto. The first leg was so delayed that we were set to arrive after our second leg departed. Luckily, our second leg also got delayed and we ended up just making it after a good run through the airport.
Somehow we ended up being the first team to arrive and collect our team t-shirts. Just for fun, we opted for pink. I was surprised that most teams simply went with generic color choices.
The weather in Orlando was near perfect in March. Our team coach, Joel, had gone the previous May and mentioned that it was much hotter then.
On the arrival day we went to a Texas BBQ place that attendees agreed was the “best food option around”. There we happened to run into some well-known figures of Competitive Programming, including tourist.
There were tons of fun events scattered across the days, including a puzzlehunt-esque “escape room”, a career fair (with more merch!), and an activities night. The catering was really good throughout the trip. The ICPC Foundation is clearly doing well, or their sponsors are…
There was fun Manifold Markets for betting on which teams would qualify to the World Finals, and we started at around a pretty reasonable 75%.
Before the actual NAC they held a couple of casual competitions, none of which went well for us. There was a training camp competition where we got stuck with a bug on problem C.
Then there was a Citadel challenge: a data processing task with Python. It was more of a reading comprehension challenge, and the interface was pretty bad, so everyone hated it. Alex is a master’s student in data science but he let us down (just kidding!).
The OpenAI heuristic challenge had several nice problems. We pretty much got all of the problems except A on paper, but we had a bug on D and also trolled B. We ended up one of the worst teams.
Then on the dress rehearsal competition we stress tested the judging server’s speed and memory capacities, a standard procedure, incurring some fake penalties in the process. Somehow, none of the other teams did similar testing, I think. This led us to rack up 20+ WAs on A, and we again landed near the bottom of the scoreboard.
After all this, our Manifold Markets odds dropped to 50%.
The rest of the time leading up to the competition day was pretty relaxed. We talked to some other teams, some sponsors, watched a movie, took some walks at night, groupsolved a Codeforces Div. 4 in 15 minutes and still lost to tourist, the usual.
We had a bad start to the actual competition. I solved one of the easier problems, F, quickly on paper with an idea. But I badly overcomplicated it and was confused as to why so many teams had solved it at that point. Worse, it TLE’d. Only much later did Rain find a simplification to that I missed.
Later, Alex also got stuck implementing M. Thankfully, at least Rain had no issues. For teams around the World Finals cutoff, the bottleneck was solving A, a medium-hard problem, and then solving at least one of the hard problems C, D, J. Almost no one solved B, G, L.
Thankfully I regained composure by solving A and then quickly fixing F. Alex then managed to fix M. In the span of 15 minutes we went from a very poor placement to 9th before the scoreboard freeze.
Although top 16 qualify unconditionally, at this point we threw too much penalty on F and M. So we weren’t safe and definitely had to solve at least one of C, D, or J. I had already spent some time thinking about D, and was close, so we all turned to it. Then, Rain decided to give C a read and quickly realized it wasn’t too bad.
Just like D in the regionals, C was again about a connected graph of order with edges — a pseudotree with one cycle.
You are given a simple connected graph of order with weighted edges. You can remove some edges, but are given pairs of vertices which must remain connected. What is the maximum total weight of edges you can remove?
Solve this in .
—Source: 2026 ICPC NAC Problem C
The first half the solution was pretty easy but long to implement, and Rain went to code. I kept thinking about the second part, which was conceptually trickier. In hindsight I should’ve gone to code since I type faster and had solved regionals D. Once Rain had finished, I also solved the second part with a linear range DP idea. Rain came up with the lazy segtree idea used in the official solution, which we agreed might be less error prone.
There was under 20 minutes left at this point, and we ended up solving C with 1 minute remaining. The rest of the competition was some insanely clutch teamwork.
T-20 minutes: Rain goes to type up the lazy segtree template while I figure out details, and when he starts to type range queries I realize we didn’t need it, only a global query. Even this probably saves a minute.
T-15: Rain finishes typing and I go to implement the last part.
T-10: It WAs on sample tests. We log a lot of stuff to debug it.
T-7: Rain realizes I may have missed a case and goes to write it.
T-5: Rain fixes it but it still WAs on samples.
T-3: I realize Rain may have used two variables in the wrong order. He swaps them.
T-2: It ACs on sample tests. We comment out all the debug logs.
T-1: We submit. It ACs!
This secured our World Finals qualification, and importantly, we edged out a higher placement than UofT :). In the end this year’s cutoff was top 18, and we would’ve qualified even without C, but it was an exhilarating experience. Overall it wasn’t the best. If my start hadn’t been so terrible, I’m pretty certain we would’ve also solved D. But I’m sure other teams were facing some issues too.
My favorite type of graph is now the unicyclic graph.
Excited for the World Finals in Dubai, though the location may change depending on world events…